当我们编译动态库时涉及到依赖第三方库时通常我们的编译命令:
#编译的目标库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