내 바이너리가 실행되지 않는 이유는 무엇입니까?

내 바이너리가 실행되지 않는 이유는 무엇입니까?

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여러 아키텍처를 지원하는 경우).

자세한 내용은 다음을 확인하세요.다중 아키텍처 가이드

관련 정보