目录
前言
一.静态动态库区别
二.静态库制作
2.1 库文件命名
三.静态库文件制作
3.1 静态库制作
3.1.1 先获得.o文件
3.1.2 生成静态库文件
3.1.3 删除不必要文件
3.1.4 使用静态库
3.1.5 使用运行运行
前言
带大家快速入门,学会制作静态库。本文详细介绍在Linux系统中使用gcc制作静态库的各种细节:库文件的命名: 必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....;静态库一般以 .a 为后缀 ;动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2
一.静态动态库区别
静态库和动态库是程序开发的两种库类型,它们在链接方式、可执行文件的独立性以及运行时加载上有着本质的区别。
首先,静态库在程序编译时会被完整地拷贝到最终的可执行文件中。这意味着使用静态库的程序在部署时不需要依赖额外的库文件,因为所有需要的代码都已经包含在内。这样做的好处是简化了程序的分发,因为用户无需安装任何额外的库即可运行程序。然而,这也导致了可执行文件体积较大,且如果静态库更新,需要重新编译整个程序以包含新的库版本。
其次,动态库在程序编译时不包含在可执行文件中,而是在程序运行时由操作系统加载。这意味着可执行文件体积较小,且当动态库更新时,只需替换库文件即可,无需重新编译程序。动态库的使用提高了代码的复用性,降低了程序之间的耦合度。但是,它要求在用户的系统上安装有相应版本的动态库文件,否则程序可能无法运行。
最后,从文件扩展名来看,静态库通常以“.a”或“.lib”为扩展名,而动态库则以“.so”或“.dll”为扩展名。这些扩展名分别对应不同的操作系统和平台。
总的来说,静态库和动态库各有优势和不足。在选择使用时,需要根据项目的具体需求来决定。例如,如果希望简化部署并且不依赖于外部库,可能会倾向于使用静态库;而如果关注于程序的更新和维护,以及减小可执行文件的大小,动态库可能是更好的选择。此外,还需要考虑目标用户的环境,确保他们能够访问到正确的库版本。
二.静态库制作
2.1 库文件命名
库文件的命名:
必须使用lib作为前缀: 比如 libDeployPkg.so.0 / libhgfs.so.0 .....
静态库一般以 .a 为后缀 ,
动态库一般以.so为后缀 库文件会有不同的版本, 一般写在后缀后面, 比如 lib.a.so.0.1.2
三.静态库文件制作
不管需要制作的是静态库还是动态库,原材料都是.o文件 (可重定位文件) 库文件内部不允许出现主函数main
gcc xxx.c -o xxx.o -c
3.1 静态库制作
文件结构
3.1.1 先获得.o文件
gcc max.c -o max.o -c -FPIC -I../inc gcc sum.c -o sum.o -c -FPIC -I../inc
3.1.2 生成静态库文件
把以上生成的两个.o文件一起编译生成静态库文件
ar -rcs libmy_lib.a max.o swap.o
3.1.3 删除不必要文件
删除写文件,方便观察
rm max.c max.o sum.c sum.o
3.1.4 使用静态库
如何使用静态库文件
gcc src/*.c -I./inc -L./lib -lmy_lib -o bin/main
3.1.5 使用运行运行
直接进去bin目录运行就可以输出了
注意:制作完静态库的时,不建议把头文件也删除。
以上是本期内容,若有错误或不懂,欢迎评论私信!!!