还记得当时怎么解决找不到linux库文件的问题的吗

还记得当时怎么解决找不到linux库文件的问题的吗,第1张

一般库文件问题大体两个原因

一,你的.so文件没有在 shared libtaty库 所以找不到

二, .so 文件 的 版本 和 要求的版本不对

1. ldd bwengine

2023 $ ldd bwengine

linux-vdso.so.1 =>  (0x00007ffdd95f6000)

libnsl.so.1 =>/lib/x86_64-linux-gnu/libnsl.so.1 (0x00007ff217e4d000)

libdl.so.2 =>/lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff217c49000)

libpthread.so.0 =>/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff217a2b000)

libstdc++.so.5 =>/usr/lib/x86_64-linux-gnu/libstdc++.so.5 (0x00007ff21774f000)

libm.so.6 =>/lib/x86_64-linux-gnu/libm.so.6 (0x00007ff217449000)

libgcc_s.so.1 =>/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff217233000)

libc.so.6 =>/lib/x86_64-linux-gnu/libc.so.6 (0x00007ff216e6e000)

/lib64/ld-linux-x86-64.so.2 (0x00007ff218067000)

2. 假设找不到 /lib/x86_64-linux-gnu/libnsl.so.1

2024 $ file /lib/x86_64-linux-gnu/libnsl.so.1

/lib/x86_64-linux-gnu/libnsl.so.1: symbolic link to `libnsl-2.19.so'

3. 检查so文件的版本依赖

类似于"/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found"的错误之前也出现在了ubuntu上安装bw的时候。原来是系统自带的某些库的版本过高了(不得不安装了老版本的库才行)。

strings /lib/x86_64-linux-gnu/libcrypto.so.10|grep libcrypto.so

2026 $ strings /lib/x86_64-linux-gnu/libnsl.so.1|grep libnsl

libnsl.so.1

libnsl-2.19.so

4. 试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found"

./qmake: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./qmake)

运行 strings /lib64/libc.so.6 |grep GLIBC_ 查看依赖的版本

运行 rpm -qa |grep glibc 查看最新版本信息

glibc-static-2.12-1.80.el6_3.6.x86_64

glibc-headers-2.12-1.80.el6_3.6.x86_64

glibc-common-2.12-1.80.el6_3.6.x86_64

安装 ../configure --prefix=/opt/glibc-2.14

临时修改环境变量  export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

最后测试程序是否可以运行

参见 : http://fanli7.net/a/bianchengyuyan/C__/20140412/490904.html

http://www.cnblogs.com/yingsi/p/3290958.html

在linux下有时明明就看到文件在当前目录下,执行权限也没问题,你一执行它就提示no such file or directory!真是坑爹啊。

造成这个问题最大的可能性就是该文件引用的动态链接库不存在,比如在64位系统中执行一些32位的老程序,经常会出现找不到对应32库的问题,多见于gcc之类,这在很多新装的64位linux中都会出现(这一点linux不如windows),偏偏提示还不直接点。解决办法当然是补齐所需的库,比如安装386的gcc。

因此下次遇到这种问题可以先用file命令看下当前文件类型及其引用的动态库。

find

语法:

[root@redhat ~]# find 路径 参数

参 数说明:

时间查找参数:

-atime n :将n*24小时内存取过的的文件列出来

-ctime n :将n*24小时内改变、新增的文件或者目录列出来

-mtime n :将n*24小时内修改过的文件或者目录列出来

-newer file :把比file还要新的文件列出来

名称查找参数:

-gid n :寻找群组ID为n的文件

-group name :寻找群组名称为name的文件

-uid n :寻找拥有者ID为n的文件

-user name :寻找用户者名称为name的文件

-name file :寻找文件名为file的文件(可以使用通配符)

例 如: 从根目录开始查找名称是zgz的文件

[root@redhat ~]# find / -name zgz

/home/zgz

/home/zgz/zgz

/home/weblogic/bea/user_projects/domains/zgz

/home/oracle/product/10g/cfgtoollogs/dbca/zgz

/home/oracle/product/10g/cfgtoollogs/emca/zgz

/home/oracle/oradata/zgz

查找名称中带有zgz的文件

[root@redhat ~]# find / -name '*zgz*'

/home/zgz

/home/zgz/zgz1

/home/zgz/zgzdirzgz

/home/zgz/zgz

/home/zgz/zgzdir

/home/weblogic/bea/user_projects/domains/zgz

/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006

/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002

/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004

/home/weblogic/bea/user_projects/domains/zgz/zgz.log

/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008

/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。

locate 是在数据库里查找,数据库大至每天更新一次。

whereis 可以找到可执行命令和man page

find 就是根据条件查找文件。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8702854.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存