为什么我的二进制文件无法运行?

为什么我的二进制文件无法运行?

我有一个在 Debian Squeeze 系统上运行的二进制文件,但它在我的 Debian Wheezy(内核 Linux 3.2.0-4-amd64)系统上没有执行任何操作。两个系统都是 64 位,而可执行文件是 32 位二进制文​​件。

这是以下的输出:

me@myhost:~$ file myApp.run
myApp.run: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped

我该如何解决此问题?我没有得到任何输出,它只是立即返回。

使用以下命令运行二进制文件strace

chadmichael@heraclitus: ~/dir$ sudo strace ./myApp.run 
execve("./myApp.run", ["./myApp"...], [/* 17 vars */]) = 0
[ Process PID=24457 runs in 32 bit mode. ]
old_mmap(0xc6d000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0xc6d000) = 0xc6d000
readlink("/proc/self/exe", "/dir/myApp.run.run", 4096) = 129
old_mmap(0x8048000, 1108297, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8048000
mprotect(0x8048000, 1108294, PROT_READ|PROT_EXEC) = 0
old_mmap(0x8157000, 42979, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0x10f000) = 0x8157000
mprotect(0x8157000, 42976, PROT_READ|PROT_WRITE) = 0
old_mmap(0x8162000, 15736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8162000
brk(0x8166000)                          = 0x866e000
open("/lib/ld-linux.so.2", O_RDONLY)    = -1 ENOENT (No such file or directory)
_exit(127)      

                    = ?

答案1

64 位操作系统没有安装 32 位库。

apt-get update; apt-get upgrade; apt-get install ia32-libs

这将提供缺少的/lib/ld-linux.so.2。

答案2

您可能缺少 i386 libc,请尝试使用apt-get install libc6-i386.

您还可以通过运行以下命令向系统添加多架构支持:

dpkg --add-architecture i386
apt-get update

之后您可以安装 i386 的软件包(apt-get install package-name:i386如果它支持多体系结构)。

欲了解更多信息,请查看多架构指南

相关内容