静态库 是在程序执行前(编译)就加入到了目标程序中去了;
优点:运行快
缺点:程序太大
动态库 是在程序执行时动态(临时)由目标程序去调用;
缺点:运行慢
优点:程序小而简洁
1.静态库的制作
//1. 将 .c 文件生成 .o 文件
gcc demo1.c -c
//则会生成一个demo1.o文件
//2. 再把 .o 文件生成 .a 静态库文件
ar rcs libdemo1.a demo1.o
//怎么使用
gcc demo2.c -ldemo1 -L ./ -o demo (-L ./ 表示指定从当前路径找库文件)
-l 是制定要用的静态库,库名掐头去尾
-L 告诉gcc编译器从-L指定的路径去找静态库,默认是从/usr/lib /usr/local/lib去找
//此时静态库已经编译到可执行程序中了
./demo 即可运行
//以上模拟分文件编程情况,demo2.c为主函数,demo1.c为功能函数
//当我们想将demo1.c分享给别人使用 但又不想给源码时,可使用这种方法
2.动态库的制作
//先生成一个 .so 动态库 文件
gcc -shared -fpic demo1.c -o libdemo1.so
// -shared 指定生成动态库
//怎么用
gcc demo2.c -ldemo1 -L ./ -o demo
-l 是制定要用的动态库,库名掐头去尾
运行前输入以下指令,指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件
export LD_LIBRARY_PATH="/home/pi/back/test" //引号内为.so动态库文件所在路径
./demo 即可运行
但此时./demo仅在当前终端能有效运行
改进:
写一个脚本
vi start.sh
给该脚本加一个可执行权限
chmod +x start.sh
./start.sh 即可在所有终端运行
脚本内容
export LD_LIBRARY_PATH="/home/pi/back/test"
./demo