GLIBC依赖

时间:2013-01-17 07:52:13

标签: c linux shared-libraries

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

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

如何将搜索路径从/lib/i386-linux-gnu/libc.so.6

更改为/lib/libc.so.6

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

3 个答案:

答案 0 :(得分:0)

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

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

  

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

答案 1 :(得分: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运行。

答案 2 :(得分:0)

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

yum install glibc.i686

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