库是一组由源文件编译生成的目标文件的集合,例如 s1.c 编译为 s1.o,s2.c 编译为 s2.o,这些目标文件可合并形成库。在 C 语言中,每个目标文件可包含多个数据结构和函数,但不能包含 main 函数,因此库本身不可独立运行,需与其他代码链接后使用。
1、 创建两个源文件 s1.c 和 s2.c,并为它们分别编写对应的头文件 s1.h 与 s2.h。
2、 将s1.c和s2.c编译并打包成静态库libs12.a。
3、 运行gcc -c s1.c s2.c命令,生成对应的目标文件s1.o和s2.o。
4、 执行命令ar cr libs12.a s1.o s2.o将目标文件打包,生成名为libs12.a的静态库文件。
5、 编写测试文件main.c,编译并链接静态库libs12.a进行功能验证。
6、 运行命令gcc -c main.c将源文件编译生成目标文件main.o。
7、 运行命令gcc -o s12.exe main.o libs12.a,将目标文件与静态库链接,生成名为s12.exe的可执行程序。
8、 运行生成的s12.exe可确认已成功连接静态文件。
9、 利用先前生成的源文件s1.c、s2.c、头文件s1.h、s2.h及测试主文件main.c进行后续操作。
10、 利用前一步通过gcc -c s1.c s2.c生成的s1.o和s2.o目标文件,运行命令gcc -fPIC -shared -o libs12.so s1.o s2.o,即可生成名为libs12.so的动态链接库文件。
11、 相同源文件下,动态库体积远大于静态库。
12、 利用上一步通过gcc -c main.c生成的目标文件main.o,运行命令gcc -o s12_so.exe main.o libs12.so,将目标文件与动态链接库结合,最终生成可执行程序s12_so.exe,完成程序的链接与构建过程。
13、 对比发现,在源文件相同的情况下,动态链接生成的可执行文件体积较小(因代码简单差异有限),而静态链接生成的可执行文件较大,动态库文件则相对较大。
14、 IDE中选择合适项目模板,按图示操作即可生成静态库。
15、 IDE生成静态库的操作与手动方式本质相同,只是实现了模板化和可视化,简化了流程。
16、 所示,选择动态库项目模板即可生成动态库。
17、 IDE生成动态库的过程与手动操作在本质上并无不同,具体所示。
评论
更多评论