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 中的路径下