Linux下程序编译通过运行时提示error while loading shared libraries(动态链接库问题)

问题:

 Linux下程序编译通过了,但是运行时提示 :error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file or directory

原因是没有找到动态链接库文件。

链接时可以通过-L和-l来指定自己的库,因此链接可以通过,但是运行时,系统仍无法找到指定的库,需要配置一下。

解决方法:

1)首先确认 缺少的so库文件。

2)之后用ldd 查看连接关系: ldd  <可执行程序>

       例如:ldd /opt/postgresql/postgresql/bin/createdb
        linux-gate.so.1 =>  (0x77f2f000)
        libpq.so.5 => not found
        libz.so.1 => /usr/lib/libz.so.1 (0x00698000)
        libreadline.so.5 => /usr/lib/libreadline.so.5 (0x037f1000)
3)将自己的库所在路径添加到/etc/ld.so.conf文件中。但一般这个文件中的内容都是一句“include /etc/ld.so.conf.d/*.conf”,

因此最好在/etc/ld.so.conf.d/目录下新建一个文件 , 如“xxx.conf”,然后将自己的库所在路径添加到这个conf文件中。

4)修改完文件后,以root身份运行   /sbin/ldconfig -v   。

 

另一种方法:

1.将用户用到的库统一放到一个目录,如 /usr/loca/lib
# cp libXXX.so.X /usr/loca/lib/           

2.向库配置文件中,写入库文件所在目录
# vim /etc/ld.so.conf.d/usr-libs.conf    
  /usr/local/lib  

3.更新/etc/ld.so.cache文件
# ldconfig  

这里采用第二种办法,它更为方便,对于原系统的改动也最小。而/etc/ld.so.conf的文件内容是include /etc/ld.so.conf.d/*.conf,所以在/etc/ld.so.conf.d目录下,加入任何以.conf为后缀的文件,都能被ld识别。

ld.so.cache的更新是递增式的,就像PATH系统环境变量一样,不是从头重新建立,而是向上累加。只有重新开机,系统才从零开始建立ld.so.cache文件。

 

 

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Linux运行程序,如果遇到以下错误之一: ``` error while loading shared libraries: <library_name>: cannot open shared object file: No such file or directory ``` 或者 ``` error while loading shared libraries: <library_name>: cannot open shared object file: Permission denied ``` 这通常表示程序依赖的共享文件无法被找到或者无法被访问。这可能是由于以下原因之一导致的: 1. 共享文件不存在:检查程序所依赖的共享文件是否存在于系统中。确保它们已正确安装或位于正确的路径下。 2. 共享路径问题:检查LD_LIBRARY_PATH环境变量是否设置正确。LD_LIBRARY_PATH指定了动态器在运行查找共享文件的搜索路径。确保共享文件所在的路径在LD_LIBRARY_PATH中,或者将共享文件复制到默认的搜索路径(例如/lib、/usr/lib等)下。 3. 缺少依赖关系:共享可能依赖其他文件。如果缺少了这些依赖关系的文件,那么程序运行会出现错误。通过使用`ldd`命令查看程序依赖的共享,并确保这些依赖已正确安装。 4. 权限问题:如果您没有适当的权限来访问或执行共享文件,那么会出现"Permission denied"错误。确保您对共享文件具有足够的权限。 5. 32位/64位不匹配:如果程序和共享之间的位数不匹配(例如,程序为32位而共享为64位),也会导致加载共享失败。确保程序和共享是兼容的。 通过检查以上问题,您应该能够解决在Linux上加载共享出现的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值