当运行程序时会出现如下类似错误时:

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

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。

在明确已经安装该库的情况下出现上述错误,可能是这个库目录并没有加入到该环境变量中,解决办法如下:

一. 更改配置文件

  1. 一般安装目录在:
    /usr/local/lib
    配置文件在:/etc/ld.so.conf文件中
    将该目录加入到共享库的配置文件中

  2. 将动态库文件加入配置:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

  3. 保存后,在命令行终端执行:
    /sbin/ldconfig -v
    ldconfig
    其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。
  
  如果运行应用程序时,还是提示以上错误,那就得确认一下是不是当前用户在库目录下是不是没有可读的权限。像我遇到的问题就是,从别的机子拷贝了一些.so动态库,然后用root权限放到了/usr/local/lib中(普通用户没有对该目录的写权限),然后切换用户运行程序时,始终提示找不到.so库,一直以为是我配置有问题,结果是因为权限原因,那些我用root权限增加到/usr/local/lib中的.so文件对于普通用户而言,是没有访问权限的,所以以普通用户运行程序,当需要链接.so库时,在/usr/local/lib中是查找不到的。

其实,对于由普通用户自己编译生成的.so库文件,比较好的做法是将这些.so库文件的路径用export指令加入到~/.bash_profile中的LD_LIBRARY_PATH变量中,LD_LIBRARY_PATH是程序运行需要链接.so库时会去查找的一个目录,~/.bash_profile是登陆或打开shell时会读取的文件,这样,每次用户登录时,都会把这些.so库文件的路径写入LD_LIBRARY_PATH,这样就可以正常地使用这些.so库文件了。

二. 修改配置文件

修改配置文件,如~/.bashrc~/.bash_profile/etc/profile
其中,普通用户可直接修改~/.bashrc~/.bash_profile,因此,该修改仅对当前用户有效。
root用户可修改/etc/profile,且对所有用户都有效。

下面以修改~/.bashrc文件为例:

vim ~/.bashrc

然后,在.bashrc文件中添加如下内容:

export LD_LIBRARY_PATH=/home/dabai/mpfr-4.0.2/lib:$LD_LIBRARY_PATH

保存并退出后,在终端输入如下命令,以使上述命令生效:

source ~/.bashrc

三. 临时解决方案

在终端使用export命令来配置环境变量,但仅限于当前终端;对于其他终端窗口则需要重新使用export命令才起作用。
export配置环境变量的格式为:

export LD_LIBRARY_PATH=/home/dabai/mpfr-4.0.2/lib:$LD_LIBRARY_PATH

其中,LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

参考:
[1] https://www.cnblogs.com/codingmengmeng/p/7456539.html
[2] https://blog.csdn.net/Xminyang/article/details/125123527
[3] https://blog.csdn.net/wanxuexiang/article/details/84574660

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐