1. makefile中制定的-LlibPath -llib;
2. /usr/lib或者/lib
ln -s source target
所以说,如果在编译阶段出现can't found libxxx.so, 只需要检查三个地方:
(1)、lib名字有没有写错,如果文件的名字是libxxx.so, 那么-l后面跟的是 xxx(即-lxxx);
(2)、lib的路径是否写错了,可以cd libPath一下,看看是否可以找到;
(3)、查看在/usr/lib或/lib中是否存在libxxx.so;
ls -l /usr/lib /lib | grep libxxx.so
解决方法:
(1) 为g++指定libpath, 比如lib在/home/bagga/workspace/lib/libxxx.so
g++ -L/home/bagga/workspace/lib -lxxx source.cpp
(2) 软链接到/usr/lib或者/lib中
ln -s /home/bagga/workspace/lib/libxxx.so libxxx.so
g++ -lxxx source.cpp
(二)在运行阶段,查找动态链接库的顺序:
1. LD_LIBRARY_PATH
export LD_LIBRARY_PATH=libpath
2. ld.so中的ld.so.cache
(1) Add libPath into ld.so.conf
sudo vim /etc/ld.so.conf
把 /home/bagga/workspace/lib/写到ld.so.conf中
然后执行sudo ldconfig
(2) Add conf_file into ld.so.conf.d
cd /etc/ld.so.conf.d
touch xxx.conf
把/home/bagga/workspace/lib/写到ld.so.conf中
然后执行sudo ldconfig
ln -s source target
(三)如何编译.so
g++ -IPIC -c source.cpp
g++ -shared source.o -o libxxx.so
g++ main.cpp lxxx
(四).so是在linux上面可以兼容
ldd xxx.so
如果没有现实error,表示兼容