在 64 位系统上使用 32 位二进制文​​件运行 ldd - 运行但不会报告

在 64 位系统上使用 32 位二进制文​​件运行 ldd - 运行但不会报告

我的链接器在

/lib{32,64}/ld-2.20.so,符号链接位于

/lib32/ld-linux.so.2

/lib64/ld-linux-x86-64.so.2(至适当的ld-2.20.sos)

当我尝试执行 32 位二进制文​​件时,一切正常。它们编译良好(我使用稍作修改的 gccspecs文件),并且似乎链接良好,并且运行良好。

当我尝试时ldd /path/to/example/32bit/binary,系统提示我not a dynamic executable。我的理解是,这是由于无法找到链接器来打开可执行文件。

readelf -l example_binary | grep interpreter正如预期的那样,给出了[Requesting program interpreter: /lib32/ld-linux.so.2]

知道为什么会发生这种情况吗/我该如何解决它?

Ps - “使用 sudo apt get ... 安装 32 位兼容库”没有帮助,因为我没有 apt/pacman/etcetera。如果我需要重新安装特定的(32 位)库,那么知道这一点会很有帮助!

Pps - 脚本文件由 at 组安装,gcc其中/usr/lib{32,64}/libc.soat为lib32libc.so.6libc_nonshared.aAS_NEEDED ( /lib32/ld-linux.so.2 ) )

答案1

事实证明这很容易。

/usr/bin/ldd只是一个脚本文件。

打开脚本文件会在顶部附近显示一行,其最初内容(在我的系统上):

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2"

更改此行即可 RTLDLIST="/lib32/ld-linux.so.2 /lib64/..."立即解决问题。

Ps(添加到这里以防它可以帮助其他努力安装 gobject-introspection 的人)如果尝试安装 gobject-introspection,该解决方案也很有用,因为它调用ldd来解析库。

我收到的错误信息是:ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

相关内容