内容摘要:
本节主要介绍静态库和动态库的制作和使用,以及比较静态库和动态库的优缺点
一、静态库的制作与使用
静态库在linux中是以.a结尾的文件。静态库是在编译过程中链接时生成可执行文件时使用的。静态库的命名规则为lib+(libname)+.a,例如libmytest.a
制作步骤:
功能 | 命令 |
---|---|
1.生成.o文件 | gcc -c hello.c -o hello.o |
2.打包.o文件 | ar rcs libmytest.a *.o |
静态库的使用:
有俩种方法都需要掌握。
gcc 源文件 静态库 -o 输出文件名
gcc mian.c libmytest.a -o myapp
gcc 源文件 -L 库目录 -l 静态库的名字,不加lib的 -o 输出文件名
gcc mian.c -L lib -l mytest -o myapp
可以使用nm命令查看静态库中的.o文件。
nm libmytest.a
静态库的优缺点
使用静态库就是在生成可执行程序时,将静态库中的.o文件加入到可执行程序中。
优点:
运行程序时不需要再链接了,运行的快,同时也不需要在发布程序时提供对应的库。
缺点:
可执行程序比较大,每次库升级时都需要重新编译程序。
二、动态库的制作与使用
动态库在linux中是以.so结尾的文件。动态库是在可执行文件运行时才会链接。动态库的命名规则为lib+(libname)+.so,例如libmytest.so
制作步骤:
功能 | 命令 |
---|---|
1.生成与位置无关的.o文件 | gcc -fPIC -c hello.c -o hello.o |
2.打包.o文件 | gcc -shared -o libmytest.so *.o |
动态库的使用:
有俩种方法都需要掌握。
gcc 源文件 动态库 -o 输出文件名
gcc mian.c libmytest.so -o myapp
gcc 源文件 -L 库目录 -l 动态库的名字,不加lib的 -o 输出文件名
gcc mian.c -L lib -l mytest -o myapp
可以使用ldd命令查看可执行文件所依赖的共享库。
ldd myapp
动态库的优缺点
使用动态库生成的可执行文件,需要在运行时链接动态库。
优点:
可执行程序小,每次库更新不用重新编译。
缺点:
运行的慢,在发布程序时要提供对应的库。
三、指定共享库的位置
链接器找不到共享库的位置,需要配置环境变量。
有俩种方法
(1)暂时使用,一般用于测试,为LD_LIBRARY_PATH赋值为共享库的地址。
export LD_LIBRARY_PATH = ./lib
(2)用于永久设置
1.修改动态链接器的配置文件。
vi /etc/ld.so.conf
2.在ld.so.conf中加入动态库绝对地址
/home/itcast/calc/lib
3.更新ld.so.conf文件
sudo ldconfig -v
只是一些制作动态库和静态库的相关命令,用到了再看看。