Ubuntu下编译动态库完全包含第三方库

当我们编译动态库时涉及到依赖第三方库时通常我们的编译命令:

#编译的目标库libtest.so ,源文件 test.cpp ,-l 依赖系统路径下的lib库

gcc -shared -o libtest.so test.cpp -fPIC -llib 

这样的方式是将第三方库的依赖路径添加到了动态库并没有真正包含第三分库,当我们打包移植到没有这个lib库的系统环境下时就出现了找不到库的情况.

解决方法:

1.找到系统目录下的所需要的静态库 例如:lib.a

#复制静态库到自己正在编译库的路径下

sudo cp /usr/local/lib/lib.a ./

2.将其解为许多的.o文件 

ar x lib.a

#查看当前路径下的所有.o文件

ls *.o

lib_1.o        lib_2.o

3.使用命令将所有的.o文件都编译与自己的文件编译为动态库,这样动态库就包含了第三分库的全部依赖,当然动态库的体积也随之增大

gcc -shared -o libtest.so test.cpp lib_1.o lib_2.o  -fPIC -llib

#查看编译好的库

ls *.so -l

-rwxr-xr-x 1 user root 46666 November 3rd 10:19 libtest.so

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值