我有一个二进制文件,需要执行一些* .so文件。 现在,当我尝试在一些旧机器上执行它时,显示
/lib/libc.so.6: version `GLIBC_2.4' not found
如何将搜索路径从/lib/i386-linux-gnu/libc.so.6
/lib/libc.so.6
所以我可以在同一台机器上运行两个不同的libc文件。
答案 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,您可能需要调用export
或env
来设置变量。
您可以使用以下命令检查它是否正常工作:
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应该足够聪明,可以通过它给出的名称找到它们。