你知道linux 静态库和共享库?.doc
《你知道linux 静态库和共享库?.doc》由会员分享,可在线阅读,更多相关《你知道linux 静态库和共享库?.doc(4页珍藏版)》请在三一文库上搜索。
1、你知道linux 静态库和共享库?1、静态库和共享库静态库和共享库(动态库),二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。静态链接库和动态链接库的区别在于,主程序在运行前,静态链接库的链接固定写入在程序中,而动态链接库则是在每次程序运行再加载链接。2、库存在的意义库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不
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 。首先使用如下指令得到相应的 obje
3、ct 文件 hot.o 和 other.ogcc -fPIC -c hot.cgcc -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
4、.c other.c这里选项 -shared 指示目标文件的类型是动态链接库,动态库的命名规范是”libyour_library_name.so”linux操作系统中,1.和静态库类似,动态库文件也是一些目标文件(后缀名为.o)的集合体而已。2.动态库的后缀名是.so,对应于windows操作系统的后缀名为.dll的动态库。3.可以使用gcc命令来创建一个动态库文件。来看一个实例,和静态库的代码实际是一样的。先看看可以编译成库文件的源文件中的代码:/* test.c */ int f() return 3; 12345代码非常简单。我们敲入下列命令:gcc -c -fPIC test.cgcc
5、 -shared -fPIC -o libtest.so test.o12会在当前目录下生成一个libtest.so动态库文件。再看如何使用这个库。看如下代码:/* app.c */ #include extern int f(); int main() printf(“return value is %dn”,f(); return 0; 12345678敲入如下命令:gcc c app.cgcc -o app app.o -L. ltest12敲命令的时候要记得将libtest.a文件和生成的app.o文件放在同一个目录(即当前目录)下。这样,敲入命令后,会在当前目录下生成一个名为app的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 你知道linux 静态库和共享库? 知道 linux 静态 共享
链接地址:https://www.31doc.com/p-3381733.html