静态库 (.a)
静态库的制作和使用
制作:
- gcc -c test.c -o test.o
- ar -crs libtest.a test.o
注:静态库取名必须lib开头,紧跟库的名字,最后跟拓展名.a使用:
- gcc -c mian.c -L 路径 -l库名
- -L:指定库的路径
- -l: 库名(不包括lib)
运行:
- ./a.out
静态库的优缺点
优点:
- 运行时不需要库,可以直接运行
缺点:
- a.out包含库文件,体积大,浪费资源
- 给程序的更新,部署,发布带来麻烦
共享库(动态库)(.so)
共享库的制作和使用
制作:
- gcc -fpIC -c test.c -o test.o
- gcc -shared -o libtest.so test.o
注:共享库命名必须lib开头,紧跟库名,以.so结尾使用:
- gcc -L 路径 -l库名 (库名不包括lib)
- ldd 可执行程序名 ——用于查看可执行程序所依赖的共享库有哪些
运行:
- ./a.out !!直接运行会报错(须先添加共享库搜索方法)
共享库搜索方法(3选一):
- 将共享库拷贝到 /lib/ 或者 /usr/lib/
$ sudo cp libtest.so /usr/lib/- export LD_LIBRARY_PATH=. (或者libtest.so所在的路径) (临时情况)
- pwd 并复制路径
- cd /etc/ld.so.conf.d
- ls
- sudo vi my.conf
- 添加路径
- sudo ldconfig 生效
特点:在编译时不会链接到可执行文件中,只是再其中保存一个索引,在运行时,才真正的链接(动态),因此可执行程序体积小。
共享库的优缺点
优点:
- 可执行程序体积较小, 节约资源;
- 只需要修改.so动态库,有利于程序的更新,部署,发布;
缺点:
- 可执行程序运行时需要库,不能直接运行。