error while loading shared libraries: xxx.so.xx: cannot open shared object file: No such file or ...

问题:

error while loading shared libraries: xxx.so.xx: cannot open shared object file: No such file or ...

       我们在linux执行可执行程序的时候,有时候会遇到错误提示找不到相应的动态链接库,一般这有两种情况,一个是没有安装相应的动态链接库;还有一种就是安装了相关的动态链接库,但是系统按照默认的共享库路径找不到该动态链接库

1. 动态库已经安装到系统的默认共享库路径 /lib或者 /usr/lib下

        如果共享库已经安装到/lib或者/usr/lib下面,那么只要执行下命令 ldconfig就行了
ldconfig命令的作用在于(该执行程序放在 /sbin目录下):

       在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib.so),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表

2. 动态库安装到非默认共享库路径(比如/usr/local/lib或者用户自定义的路径)

      如果所需要的动态库的安装路径不是 /lib 或者 /usr/lib, 那么可以将该动态库的路径加入到动态库配置文件/etc/ld.so.conf里面,假定该动态库的路径是 /usr/local/lib, 那么可以执行以下命令(或者直接在/etc/ld.so.conf中添加要共享的动态库目录):

$ echo "/usr/local/lib" >> /etc/ld.so.conf
$ /sbin/ldconfig

3. 动态库安装到非默认共享库路径(比如/usr/local/lib或者用户自定义的路径),又不想更新/etc/ld.so.conf

       有时候,我们自己开发的程序,可能会用到某个我们自己的某个动态库,然后我们不想将我们的自己的动态库安装到默认动态库路径,也不想加入到/etc/ld.so.conf文件,那么我们可以将我们的自己的动态库路径加入到环境变量LD_LIBRARY_PATH,然后运行程序的时候,也会去这个环境变量所指的路径去查找动态库,如果有多个路径,以 ':'分开,比如我们的共享库跟我们的可执行路径放在同一个目录,那么可以如下操作:

$ export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH$
$ ./my_exe

4. 然后如果程序所需的动态库版本比系统已存在的共享库版本低,但是共享库向下兼容的话,可以建个软连接

       error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory

比如我的程序需要libmysqlclient.so.15, 然后系统里面已经有libmysqlclient.so.16,可以做个软连接:

ln -s libmysqlclient.so.16  libmysqlclient.so.15
原创文章 99 获赞 68 访问量 4万+

猜你喜欢

转载自blog.csdn.net/King_weng/article/details/103283149