1 静态库
静态库就是目标文件的集合,以.a结尾。静态库在程序链接的时候使用,链接器会将程序中使用到的函数的代码从
库文件中拷贝到应用程序中去(a.out)。一旦链接完成,那么在执行程序时就不需要该静态库了。由于每个使用静
态库的应用程序(a.out)都需要拷贝所用函数的代码,所以静态链接的文件会比较大。
1.1 静态库的创建
1)编辑.c和.h文件
2)编译生产目标文件:gcc -c xxx.c -o xxx.o
gcc -c yyy.c -o yyy.o
...
3)打包成静态库文件:ar -r libxxxxxxxxx.a xxx.o yyy.o
-r:将目标文件插入到静态库中,已存在则更新
1.2 静态库的使用
1)直接法
gcc xxx.c libxxxxx.a
2)环境变量法
export LIBRARY_PATH=.:$LIBRARY_PATH
(声明定义) 环境变量的名称=.:原有值(取原有值只要在变量的前面加一个$符号)
gcc xxx.c -lxxxxx
3)参数法
gcc main.c -lmy -L./
2 共享库
共享库在程序链接时,并不像静态库那样拷贝使用函数的代码,而只是做一些标记,然后在程序启动的时,动态加载所
需要的共享库。所以当应用程序运行时,任然需要共享库的支持。共享库链接出来的a.out要比静态库链接出来的a.out
要小。
2.1 共享库的创建
1)编辑.c .h
2)编译生成目标文件 gcc -c -fpic xxx.c -o xxx.o
gcc -c -fpic yyy.c -o yyy.o
......
3)链接生产共享库文件 gcc -shared xxx.o yyy.o -o libxxxx.so
gcc -shared -fpic xxx.c yyy.c -o libxxxx.so
2.2使用共享库
1)直接法
gcc xxx.c libxxxxx.so
2)环境变量法
export LIBRARY_PATH=.:$LIBRARY_PATH
(声明定义) 环境变量的名称=.:原有值(取原有值只要在变量的前面加一个$符号)
gcc xxx.c -lxxxxx
3)参数法(推荐)
gcc main.c -lmy -L./
2.3 运行
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH:指定共享库加载目录
【总结】静态库占用的空间大,不易修改,但执行效率高
共享库占用的空间小,易于修改,但执行效率低
需要使用的命令:
ar:打包
nm:可以查看目标文件(.o)、可执行文件(a.out)、静态库文件(.a)、共享库文件(.so),他们中的所有的符号
ldd:可以用来查看可执行文件(a.out)和共享库文件(.so)的动态依赖
objdump:显示二进制模块的汇编信息(查看代码的执行效率)
静态库和共享库-Linux/Unix
最新推荐文章于 2023-06-11 18:00:33 发布