文章目录
一、gcc生成静态库和动态库
函数库分为静态库和动态库两种。静态库在被程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中而是在程序运行时才被载入,因此在程序运行时还需要动态库存在。
(一)、hello实例使用库
1、编辑生成程序hello.c、hello.h、main.c文件
hello.h程序:
hello.c程序:
main.c程序:
2、将hello.c编译成.o文件
使用ls命令查看是否生成hello.o文件
3、由.o文件创建静态库
静态库文件的命名规范是以lib为前缀,紧接着为静态库名,扩展名为.a。
创建静态库用ar命令。
使用ls命令查看libmyhello.a文件
4、在程序中使用静态库
方法一:
对于自定义的静态库,main.c还可以放在-L.和-lmyhello之间,否则myhello没有定义。
-L.:表示连接的库在当前目录
方法二:
方法三:
验证静态库特点:
在删掉静态库的情况下,运行可执行文件,发现程序仍旧正常运行,表明静态库跟程序执行没有联系。同时,也表明静态库是在程序编译的时候被连接到代码中的。
5、由.o文件创建动态库
动态库文件命名规范:以lib作为前缀,扩展名为.so。
gcc -shared -fPIC -o libmyhello.so hello.o
shared:表示指定生成动态链接库,不可省略。
-fPIC:表示编译为位置独立的代码,不可省略。
命令中的-o一定不能够被省略。
6、在程序中使用动态库
gcc -o hello main.c -L. -lmyhello或gcc main.c libmyhello.so -o hello
再运行可执行文件hello,会出现错误,此时将将libmyhello.so复制到目录/usr/lib中可解决问题。
(二)、使用静态库实例
1、创建编辑x2x.h、x2x.c、x2y.h、x2y.c、main.文件
x2x.h程序:
x2y.h程序:
x2x.c程序:
x2y.c程序:
main.c程序:
2、将x2x.c、x2y.c文件生成.o文件
使用ls命令查看是否生成x2x.o、x2y.o文件。
3、由.o文件创建静态库
4、使用.a文件创建可执行文件并执行
使用size记录文件大小:
(三)、使用动态库实例
同(二)中实例文件。
1、由.o文件创建动态库
2、由.so文件创建可执行文件并执行
此时出现错误,将libafile.so复制到目录/usr/lib中可解决问题。
使用size记录文件大小:
二、总结
通过几个程序用gcc生成静态库和动态库的练习过程,基本上能够熟练的生成静态库和动态库。在静态库与动态库的使用中能明显感知两种库的差别。