내가 명령을 실행할 때
./program
오류가 발생합니다.
bash: ./program: cannot execute binary file: Exec format error
내가 실행하면 uname -a
다음을 얻습니다.
4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux
또한 실행하려는 프로그램에 대한 정보를 확인했는데 다음과 같은 결과가 나왔습니다.
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=c154cb3d21f6bbd505d165aed3aa6ed682729441, not stripped
/proc/cpuinfo
프로그램
flags : fpuvme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts
이 프로그램을 어떻게 실행할 수 있나요?
답변1
64비트 x86 CPU( lm
에 /proc/cpuinfo
)가 있지만 32비트 커널을 실행하고 있습니다. 실행하려는 프로그램에는 64비트 런타임이 필요하므로 그대로 실행되지 않습니다. 32비트 커널은 64비트 CPU에서도 64비트 프로그램을 실행할 수 없습니다.
32비트 버전의 프로그램을 찾을 수 있다면(또는 직접 빌드할 수 있다면) 이를 사용하십시오.
또는 64비트 커널을 설치하고 재부팅한 다음 프로그램에 필요한 64비트 라이브러리를 설치할 수 있습니다.
64비트 커널을 설치하려면 다음을 실행하십시오.
sudo dpkg --add-architecture amd64
sudo apt-get update
sudo apt-get install linux-image-generic:amd64
그러면 최신 64비트 Xenial 커널과 다양한 64비트 지원 패키지가 설치됩니다. 다시 시작한 후에는 대신 uname -a
표시되는 것을 확인해야 합니다 . 프로그램을 다시 실행하려고 하면 제대로 작동할 수도 있고, 후자의 경우 누락된 라이브러리로 인해 오류 메시지가 나타날 수도 있습니다. 프로그램을 제대로 실행하려면 적절한 패키지를 설치하세요.x86_64
i686
apt-file
답변2
Ubuntu Server에서 동일한 문제가 있었고 다음 오류가 발생했습니다.
-bash: /usr/bin/my-script: cannot execute binary file: Exec format error
arm CPU에서 x86-64 파일을 실행하기 위한 일반적인 솔루션을 찾았습니다. 다음 코드를 실행하면 문제가 해결되었습니다.
sudo apt update
sudo apt install -y qemu-user-static binfmt-support
sudo dpkg --add-architecture amd64
sudo apt update
sudo apt install libc6:amd64
답변3
32비트 CPU(x86)가 있고 64비트 실행 파일(x86_64)을 실행하려고 합니다. 이 CPU에서는 실행 파일을 실행할 수 없습니다. 32비트 버전을 찾거나 소스 코드를 직접 컴파일하십시오.