linux静态库和动态库的创建与使用
静态库与动态库的创建与使用
1. 基本概念
静态库链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 lux / wdows 下扩展名分别为.a / .lib
动态库链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 lux / wdows 下扩展名分别为.so / .dll
区别主要体现在
a、可维护性。
合入更新。合入动态库的更新,只要替换库即可。但合入静态则需要重新链接,生成新的可执行程序,全量更新。
环境依赖。若包含静态库,编译成功后不依赖环境。动态库则存在依赖关系,需要环境中存在对应的动态库。
b、大小
空间利用率。若依赖相同静态库,则存在多份拷贝。
可执行文件大小。静态库文件较大。
c、动态库可以实现进程之间的资源共享,也称为共享库。
2. 静态库的创建与使用
静态库本质就是一组 .o 组成的压缩文件,扩展名为 .a / .lib
复制代码
ar -crv libXXX.a mmmm.o nnnn.o
XXX 是库名,mmmm.o nnnn.o 是要打包的目标文件。crv 参数,含义分别是
c: do not warn if the library had to be created
r: replace existg or sert new file(s) to the archive
v: be verbose
使用时,只需在代码中引入 头文件,链接时,指定静态库的搜索路径(-L选项)和静态库名(不需要lib前缀和.a后缀,-l选项)。
复制代码