大家好,又见面了,我是你们的朋友全栈君。
一.静态库
静态库只是将一些c或者cpp文件编译成.o之后打包成一个.a,这个静态库中有所有文件的.o,所有文件的符号链接,函数表。能清楚的查询到需要的函数名字,用到的源文件名字。
查看.a中含有哪些文件
ar t temp.a
查看符号表之类的信息,函数栈
nm temp.a
假设,一个temp.a 一个你自己编写的hello.c 其中hello中引用了temp.a中的函数。你想把.a中的函数做一层转换然后给其他人使用,这时候你可以先解压出.a中的所有.o然后在加上你编写的hello.c重新打包成一个新的hello.a给其他人使用。
ar x temp.a //从存档中提取成员
ar cru temp.a *.o//重新创建一个归档,当前目录下所有的.o
ranlib temp.a// 打包成.a
还有一中方式:
直接向.a中添加某个.o文件
ar -q temp.a hello.o
二.使用静态库方法
1.在makefile中包含其头文件 -I xxx/include
2.在makefile中链接时间直接写上.a的全路径 xxx/temp.a
三.动态库。
1.动态库的创建
*******确保所有的文件编译的过程中都使用到-shared -fPIC 选项,否则出错。
gcc -c hello.c -fPIC -o hello.o
gcc -shared -fPIC hello.o -o libhello.so
2.动态库的使用
1.首先makefile中包含其头文件。
2.加上-L 指定库的路径 -L xxx/lib
3.加上编译选项-lhello 注意需要去掉之前的lib
查看某个动态库依赖其他的so 可以直接对其ldd 就能查看到
转载于:https://www.cnblogs.com/xlsss159/p/11090969.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106751.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...