Linux二进制文件找不到共享库,但在strace中运行时工作

ajd*_*con 3 shared-libraries strace

(注意:下面的二进制文件和二进制文件以及库的名称都是混淆的,以保护无辜者.;-)该应用程序在NDA下是专有的,但行为可能不依赖于它.)

我有一个Linux二进制文件,在运行时会输出以下错误:

binary:加载共享库时出错:libshared.so:无法打开共享对象文件:没有这样的文件或目录

自libshared以来,它本身就令人困惑.所以在LD_LIBRARY_PATH中.然而,

  • 运行时正确找到库ldd binary(即ldd输出指向文件位置)

  • 运行时可以正确找到库strace binary,以便程序能够打印其使用信息!

我从来没有见过一个应用程序,当它自己运行而不是在strace中运行时表现不同,但我想也许其他人已经看到过这种情况发生之前?任何想法如何解决这个问题?

我没有源,所以我无法重建.在strace下运行应用程序可能不是首发.操作系统是RHEL 6.2.

小智 7

(老问题,但希望这会帮助其他人)

在新的Linux安装下,标准系统运行时链接程序不会将LD_LIBRARY_PATH用于已设置SUID的程序.看来,使用strace,GDB和朋友们的工作方式不同,并且使用LD_LIBRARY_PATH.

对于suid程序,必须在系统库缓存中找到所有库.检查(以root用户身份)是否存在"缺失"库

ldconfig -p | grep <my_library_name>
Run Code Online (Sandbox Code Playgroud)

并且,如果缺少任何内容,请根据需要将其添加到/etc/ld.so.conf或ld.so.conf.d /中的新文件中,然后使用

ldconfig -v
Run Code Online (Sandbox Code Playgroud)

或者,如果不需要,则删除SUID位,当然.