我的链接器在
/lib{32,64}/ld-2.20.so
,符号链接位于
/lib32/ld-linux.so.2
和
/lib64/ld-linux-x86-64.so.2
(至适当的ld-2.20.so
s)
当我尝试执行 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.so
at为lib32libc.so.6
libc_nonshared.a
AS_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