如何封装C语言静态库和动态库
1、准备两个源文件s1.c、s2.c,以及相应的头文件s1.h、s2.h。
2、从s1.c和s2.c生成静态库libs12.a:
(1)执行指令“gcc -c s1.c s2.c”生成目标文件:s1.o、s2.o
(2)执行指令“ar cr libs12.a s1.o s2.o”生成静态库:libs12.a
3、准备测试文件main.c并编译连接静态库libs12.a
(1)执行指令“gcc -c main.c”生成目标文件:main.o
(2)执行指令“gcc -o s12.exe main.o libs12.a”生成可执行文件s12.exe
(3)执行生成的s12.exe可验证成功连接静态文件
1、使用上一步的源文件s1.c、s2.c、s1.h、s2.h以及测试文件main.c
2、使用上一步用“gcc -c s1.c s2.c”生成的目标文件s1.o、s2.o,执行指令“gcc -fPIC -shared -o libs12.so”生成动态库:lib12.so
对比发现,源文件相同,动态库文件比静态库文件要大得多。
3、使用上一步用“gcc -c main.c”生成测试用目标文件main.o,执行指令“gcc -o s12_so.exe main.o libs12.so”生成可执行文件s12_so.exe
对比可知,源文件相同,动态连接生成的可执行文件要比静态连接的要小(因测试代码简单,所以小得有限),而动态库要大。
1、IDE生成库可选择相应的项目模版,如下图所示,生成静态库。
可以发现,IDE生成静态库操作与前述手工操作并没有本质上的区别,只不过是模版化、可视化了。
2、Code::Blocks生成动态库如下图所示,选择动态库项目模版。
同样,IDE生成动态库操作与手工操作没有本质区别,如下图所示。