找不到动态库.so--cannot open shared object file

明明安装了库,也在CMake里指定了路径,但还是报这个错误

  1. 修改/etc/ld.so.conf 然后刷新

Linux回到这个文件定义的路径里寻找库文件

1
2
3
sudo vim /etc/ld.so.conf
# 添加你的库文件路径
sudo ldconfig

  1. 修改环境变量LD_LIBRARY_PATH
1
2
export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH
sudo ldconfig
  1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
1
2
ln -s /where/you/install/lib/*.so /usr/lib
sudo ldconfig
  1. 强行将路径写进去
  2. 路径写进去不行的话,在~/.bashrc中,导入export环境变量 LD_LIBRARY_PATH
  3. /etc/ld.so.conf/目录下,添加该文件的路径,首先命令行输入locate package,定位软件包的位置,然后找个.conf文件,将路径加进去之后,重新sudo ldconfig

运行时动态库的搜索路径的先后顺序是

  1. 编译目标代码时指定的动态库搜索路径
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  4. 默认的动态库搜索路径/lib/usr/lib

这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib/usr/lib只有root权限才可以修改,如果对环境变量LD_LIBRARY_PATH进行操作就能解决问题,不要改/etc/ld.so.conf/lib/usr/lib