你知道linux 静态库和共享库?
1、静态库和共享库
静态库和共享库(动态库),二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
静态链接库和动态链接库的区别在于,主程序在运行前,静态链接库的链接固定写入在程序中,而动态链接库则是在每次程序运行再加载链接。
2、库存在的意义库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
3.静态库 Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表 Step 2.ar 命令将很多.o转换成.a,成为静态库
静态链接库libcool.a 遵从GNU/Linux 规定的静态链接库命名规范,必须是”libyour_library_name.a”
动态库的后缀是.so,它由gcc加特定参数编译产生。 4、动态库
在GNU/Linux 中动态链接文件,必需通过链接器ld 生成。假设我们有hot.c other.c 等文件要生成动态链接库libhot.so 。首先使用如下指令得到相应的object 文件hot.o 和other.o gcc -fPIC -c hot.c gcc -fPIC -c other.c 参数-fPIC 指定生成的object 文件为位置无关代码(position-independence code),只有PIC 可以被用作生成动态链接库。然后使用如下指令得到动态库:
ld -Bshared -o libhot.so hot.o other.o 或者可以使用编译器的ld wrapper: gcc -shared -o libhot.so hot.o other.o 也可以使用编译器直接生成动态库: gcc -fPIC -shared -o libhot.so hot.c other.c 这里选项-shared 指示目标文件的类型是动态链接库,动态库的命名规范是”libyour_library_name.so”
本文详细介绍了Linux下的静态库和共享库的区别,包括它们在编译和运行过程中的作用方式。同时探讨了这两种库文件的创建过程及它们对于程序大小和性能的影响。
2099

被折叠的 条评论
为什么被折叠?



