Linux静态链接库动态链接库的创建和使用及区别.docx
《Linux静态链接库动态链接库的创建和使用及区别.docx》由会员分享,可在线阅读,更多相关《Linux静态链接库动态链接库的创建和使用及区别.docx(7页珍藏版)》请在三一办公上搜索。
1、Linux静态链接库动态链接库的创建和使用及区别 标题:Linux下静态、动态库的创建和使用及区别 一、静态链接库的创建与使用: 1、编写add.c 及main.c代码: /*/ /*add.c*/ int add(int x, int y) return x + y; return 0; /*/ 然后add.h代码为: /*add.h*/ #ifndef _ADD_H_ #define _ADD_H_ int add(int, int); #endif /*/ main函数代码: /*main.c*/ #include int main(void) printf(2+3= %dn, add(
2、2,3); return 0; /*/ 2、现在首先要明确我们目的是将add.c做成静态链接库,然后main.c调用生成的静态链接库中的add (1)将add.c做成静态链接库(创建静态库): 首先将add.c编译成目标文件(add.o文件),如下: #gcc -c add.c /生成add.o 然后将生成的目标文件(add.o)生成静态库libadd.a: #ar crv libadd.a add.o /生成libadd.a (2)静态库做好了,就可以在编译main.c时将静态库链接进去了,接下来就编译生成可执行文件(静态库的使用): #gcc -o exe main.c -I. -L. -
3、ladd /或者 #gcc -o exe main.c ./libadd.a /再或者#gcc -o exe main.c -L. libadd.a (注:这里的-I/路径, -L/路径, 是通过-I和-L指定对应的库文件名和库文件的路径,这里就是当前目录, libadd.a就是要用的静态库,这样对应的静态库已经编译到对应的可执行程序中。执行对应的可执行文件 便可以得到对应函数调用的结果。在main.c中不需要包含导出文件的头文件。 上面的(2)分开就是: 1)编译生成对应的目标文件: #gcc -c -I/home/hcj/xxxxxxxx main.c #gcc -o exe -L/hom
4、e/hcj/xxxxxxxx main.o libstr.a 还有若主函数是C+程序,则需要在main.cpp中用extern C包含 2)生成可执行文件: 被调用函数(add.c)的 头文件,编译时用g+编译或者还用gcc编译但需加上一个链接c+库的参数(-lstdc+) ) (3)最后执行可执行程序: #./exe 二、动态链接库的创建与使用: 1、把add.c编译生成动态库(创建动态库): #gcc -fPIC -c add.c /生成add.o #gcc -shared -o libadd.so add.o /* 或者 #ar crv libadd.so add.o */ (上面两行可
5、以整合成一行:#gcc -fPIC -shared -o libadd.so add.c) 注:-fpic 使输出的对象模块是按照可重定位地址方式生成的(即与位置无关)。 -shared指定把对应的源文件生成对应的动态链接库文件libstr.so文件 2、动态库的使用(动态链接库分:隐式调用和显式调用2种): (1)隐式调用: 动态链接库在代码上与写静态链接库没什么区别,主要是在编译时。 代码编写与静态库一样,不需要包含导出函数的头文件,若主函数是C+程序,则需要在main.cpp中用 extern C包含被调用函数(add.c)的头文件(这里需要包含头文件是与.cpp和.c混合编译有关,同静
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 静态 链接 动态 创建 使用 区别

链接地址:https://www.31ppt.com/p-3160652.html