目录
一 背景
自己写了一个库,然后写了一个demo去调用,调用的时候提示
./test: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory
二.问题分析
1.定位问题
首先用ldd ./test 来查看当前的demo 依赖哪些lib,发现libiViewerSDK2 没找到
由于windows上开发久了,潜意识里认为把lib放到test 相同的目录下即可执行,如下所示
但是发现还是不行。
2. Linux下的常识
Linux下的lib(so)文件搜索路径通常在 /usr/lib 和 /lib下
所以我们自己写的代码,.so是生成在当前目录下的,并没有在上面这两个目录下,所以哪怕跟可执行文件放在一个文件夹中,也是不能执行的
三 解决问题
1.首先介绍一个变量$LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH 可以查看其内容
可以发现,该变量定义了要去哪个目录下查找lib(.so)文件,所以我们需要修改这个路径
2.如何解决
(1)设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH
sudo ldconfig
这样子设置过之后,关闭终端上面的设定就会失效
(2)用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s /where/you/install/lib/*.so /usr/lib
(3)修改/etc/ld.so.conf,然后刷新
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
3.解决一下
采用第一种方法解决一下
如下图所示
参考:https://www.cnblogs.com/youxin/p/5116243.html
https://www.cnblogs.com/ysk123/p/9968421.html