【发布时间】:2014-05-11 14:32:58
【问题描述】:
我有一个为较旧版本的 linux 构建的二进制文件,当我将二进制文件放入较新的 linux 并尝试运行它时,它会显示“没有这样的文件或目录”错误。
我搜索并发现这是关于不正确的库链接。我在这个二进制文件上使用了 ldd,显示的输出是这样的:
./test.exe: /lib/libpthread.so.0: version 'GLIBC_2.1' not found (required by ./test.exe)
./test.exe: /lib/libpthread.so.0: version 'GLIBC_2.0' not found (required by ./test.exe)
./test.exe: /lib/libpthread.so.0: version 'GLIBC_2.3.2' not found (required by ./test.exe)
./test.exe: /lib/libc.so.6: version 'GLIBC_2.1.3' not found (required by ./test.exe)
./test.exe: /lib/libc.so.6: version 'GLIBC_2.1' not found (required by ./test.exe)
./test.exe: /lib/libc.so.6: version 'GLIBC_2.0' not found (required by ./test.exe)
libpthread.so.0 => /lib/libpthread.so.0 (0x40004000)
libstdc++.so.5 => not found
libm.so.6 => /lib/libm.so.6 (0x40025000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400cd000)
libc.so.6 => /lib/libc.so.6 (0x400e1000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.3 (0x2a000000)
我确实尝试使用 -static 编译二进制文件以尝试将所需的库嵌入到二进制文件中(如果我理解 -static 选项正确),但结果没有改变。我不熟悉编译链接的东西。任何人都可以就如何解决这个问题提供一些帮助吗?谢谢!
我想做的就是让这个二进制文件在较新版本的 linux 上运行,我还搜索了一些解决方案,建议将旧库复制到某个文件夹并使用“包装器”来强制这个二进制文件使用该库文件夹,但仍然没有幸运。
更新:
我正在为 ARM linux 做这件事。我没有提到它,因为我没有意识到这很重要。
然而,这两个 linux 版本来自同一家公司,他们将其命名为 ts-linux。我们从他们那里购买了 ARM 板,他们还提供了几个 linux 版本供客户使用。
基于这个事实,我认为这两个linux应该没有GLIBC和uClibc那么不同。我试图将旧库复制到新系统并将 LD_LIBRARY_PATH 设置为旧库,但是所有系统命令都不起作用,例如,
ts7800-16:~# export LD_LIBRARY_PATH=/root/libtemp/
ts7800-16:~# ls
ls: /root/libtemp/libgcc_s.so.1: version 'GCC_3.5' not found (required by ls)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by ls)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by /lib/libselinux.so.1)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by /lib/librt.so.1)
ls: /root/libtemp/libpthread.so.0: version 'GLIBC_2.4' not found (required by /lib/librt.so.1)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by /lib/libacl.so.1)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by /lib/libdl.so.2)
ls: /root/libtemp/libc.so.6: version 'GLIBC_2.4' not found (required by /lib/libattr.so.1)
在我看来,他们也在使用其他版本的 GLIBC(如果我错了,请原谅我的无知)
我确实检查了linux版本,以下是两个:
ts7800-16:~# more /etc/debian_version
6.0.3
root@ts7800:root# 更多 /etc/debian_version
3.1 中士
【问题讨论】:
-
编译旧版本?
标签: linux static-libraries static-linking