私がコマンドを実行すると
./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ビット版を探すか、ソースコードを直接コンパイルしてください。