Linux

為什麼我的二進製文件不能執行?

  • January 7, 2013

我有一個在我的 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)      

                   = ?

64 位作業系統沒有安裝 32 位庫。

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

這將提供缺少的 /lib/ld-linux.so.2。

您可能缺少 i386 libc,請嘗試使用apt-get install libc6-i386.

您還可以通過執行以下命令向您的系統添加多架構支持:

dpkg --add-architecture i386
apt-get update

apt-get install package-name:i386之後,如果i386 支持多架構,您可以安裝一個包。

有關更多資訊,請查看multiarch howto

引用自:https://unix.stackexchange.com/questions/60570