0

我有一个需要一些 *.so 文件来执行的二进制文件。现在,当我尝试在一些旧机器上执行它时,它显示

/lib/libc.so.6: version `GLIBC_2.4' not found

如何将其搜索路径更改为/lib/i386-linux-gnu/libc.so.6from/lib/libc.so.6

所以我可以在同一台机器上运行两个不同的 libc 文件。

4

3 回答 3

0

您是否在 32 位系统上,并且可能正在尝试执行使用 64 位 glibc 的二进制文件?

可以通过使用 LD_LIBRARY_PATH 变量来修改库搜索路径,例如在子shell中:

(导出 LD_LIBRARY_PATH=/lib/i386-linux-gnu:${LD_LIBRARY_PATH}; my_program)

于 2013-01-17T08:11:21.080 回答
0

LD_LIBRARY_PATH您可以在调用二进制文件时使用环境变量更改搜索路径。

类似于以下内容:

LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6 ./your_binary

应该管用。请记住,根据您使用的 shell,您可能需要调用exportenv设置变量。

您可以使用以下命令检查它是否正常工作:

LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6libc.so.6 ldd ./your_binary
        linux-vdso.so.1 =>  (0x00007fff140e9000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x008f9000)
        librt.so.1 => /lib/librt.so.1 (0x006f1000)
        libacl.so.1 => /lib/libacl.so.1 (0x004e8000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00129000)
        libdl.so.2 => /lib/libdl.so.2 (0x00f25000)
        /lib/ld-linux.so.2 (0x003b3b000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00d07000)
        libattr.so.1 => /lib/libattr.so.1 (0x00b02000)

您只需要检查是否libc.so.6正在解析为您想要的共享对象。

更新:您似乎想为 64 位二进制文​​件加载 32 位共享对象。据我所知,没有办法做到这一点,因为目标架构不同,加载程序将拒绝加载 32 位。如果这是您的情况,这可能解释了加载程序加载默认值的原因libc。根据您的情况,可能会将二进制文件编译为 32 位,在这种情况下,它应该以 32 位运行libc

于 2013-01-17T08:21:14.203 回答
0

如果要在 64 位机器上运行 32 位可执行文件,则需要安装 32 位版本。在 Fedora 或其他带有 yum 的系统上运行:

百胜安装 glibc.i686

(注意 .i686 后缀,它专门询问 32 位版本)然后再试一次。ldd(1) 命令应该有助于识别所需的库,并且 yum 应该足够聪明,可以通过它给出的名称找到它们。

于 2013-01-20T02:37:38.290 回答