如何封装C语言静态库和动态库

2025-05-20 04:15:41

库是包含一组目标文件的文件,目标文件从对应的源文件编译得到,比如s1.c编译得到s1.o,s2.c编译得到s2.o等,而s1.o与s2.o殪讧唁跬等聚合成库。对C语言来说,目标文件中包含了若干数据结构与函数,但不能包含main函数。库有静态库与动态库之分。静态库对应静态链接,即编译器将源文件编译成目标文件,然后与连接静态库合并成一个可执行文件。动态库对应动态链接,与静态链接区别在于,动态链接不合并动态库,动态库加载在程序执行时完成,这样就可以共享一份代码,也就是说动态库只有一份,静态库被拷贝了多份。本文首先以gcc生成库为例,展示库的本质,然后以Code::Blocks为例展示IDE如何进行库生成。

工具/原料

gcc

Code::Blocks

1、用gcc生成C语言静态库

1、准备两个源文件s1.c、s2.c,以及相应的头文件s1.h、s2.h。

如何封装C语言静态库和动态库

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

如何封装C语言静态库和动态库

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可验证成功连接静态文件

如何封装C语言静态库和动态库

2、用gcc生成C语言动态库

1、使用上一步的源文件s1.c、s2.c、s1.h、s2.h以及测试文件main.c

如何封装C语言静态库和动态库

2、使用上一步用“gcc -c s1.c s2.c”生成的目标文件s1.o、s2.o,执行指令“gcc -fPIC -shared -o libs12.so”生成动态库:lib12.so对比发现,源文件相同,动态库文件比静态库文件要大得多。

如何封装C语言静态库和动态库

3、使用上一步用“gcc -c main.c”生成测试用目标文件main.o,执行指令“gcc -o s12_so.exe main.o libs12.so”生成可执行文件s12_so.exe对比可知,源文件相同,动态连接生成的可执行文件要比静态连接的要小(因测试代码简单,所以小得有限),而动态库要大。

如何封装C语言静态库和动态库

3、用Code::Blocks生成库

1、IDE生成库可选择相应的项目模版,如下图所示,生成静态库。可以发现,IDE生成静态库操作与前述手工操作并没有本质上的区别,只不过是模版化、可视化了。

如何封装C语言静态库和动态库
如何封装C语言静态库和动态库

2、Code::Blocks生成动态库如下图所示,选择动态库项目模版。同样,IDE生成动态库操作与手工操作没有本质区别,如下图所示。

如何封装C语言静态库和动态库
如何封装C语言静态库和动态库
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢