linux 缺少动态链接库error while loading shared libraries

error while loading shared libraries的解決方法:
执行行程式时,如遇到像下列错误:

./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory

那就表示系统不知道xxx.so 放在哪个目录下。

可以在/etc/ld.so.conf中加入xxx.so所在的目录。

一般情况,有很多.so在/usr/local/lib路径下,可以在/etc/ld.so.conf中加入/usr/local/lib这一行

或者加入一行xx.so所在的绝对路径,如/usr/local/log4cxx/lib/ 也行。

保存后,还要执行 /sbin/ldconfig –v 更新才生效。

如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

总结下来主要有几种方法:

  • 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边

ln -s /where/you/install/lib/*.so /usr/lib
sudo ldconfig

  • 修改LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH
sudo ldconfig

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

vim /etc/ld.so.conf
add /where/you/install/lib

sudo ldconfig

  • 将所需要的.so文件拷贝到/etc/ld.so.conf 中的路径下

你可能感兴趣的:(Linux,linux,服务器,运维)