目录
一 背景
自己写了一个库,然后写了一个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

本文详细介绍了在Linux环境下,解决自定义.so库加载失败的方法。通过分析问题原因,了解Linux下的.lib搜索路径,提供了修改LD_LIBRARY_PATH环境变量、使用符号链接或编辑ld.so.conf文件三种解决方案。
258

被折叠的 条评论
为什么被折叠?



