Saya mencoba menjalankan program, tetapi kesalahan terjadi seperti ini:
bash: ./program: cannot execute binary file: Exec format error
Hasilnya file program
adalah:
program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped
Bagaimana saya bisa memperbaiki kesalahan ini?
Saya menggunakan Ubuntu 14.04.2 (amd64) dengan VMware. Saya juga mencoba dengan Ubuntu i386, tetapi hasilnya sama.
executable
Soongeun Hwang
sumber
sumber
Jawaban:
Anda mencoba menjalankan executable yang dikompilasi untuk arsitektur ARM pada arsitektur x86-64, yang mirip dengan meminta prosesor Anda yang hanya berbicara bahasa Inggris untuk mengambil arah dalam bahasa Cina.
Jika Anda perlu menjalankan executable itu, Anda memiliki dua pilihan:
Dapatkan versi x86-64 dari executable (dengan cara apa pun; jika Anda tidak bisa mendapatkan versi executable x86-64 tetapi Anda bisa mendapatkan kode sumbernya, Anda dapat mencoba mengkompilasi ulangnya di mesin virtual );
Instal Ubuntu Server untuk ARM sebagai pengganti Ubuntu 14.04.2 (amd64). Ini membutuhkan mesin fisik yang berjalan pada arsitektur ARM atau perangkat lunak virtualisasi yang dapat menirunya.
sumber
Ini juga dapat terjadi jika Anda mencoba menjalankan executable x86-64 pada platform 32-bit.
Dalam satu contoh spesifik, saya mengunduh Visual Studio Code dan mencoba menjalankannya pada instalasi Ubuntu saya, tetapi saya tidak menyadari bahwa saya telah menginstal Ubuntu 32-bit di VM ini. Saya mendapatkan kesalahan ini, tetapi setelah mengunduh versi 32-bit, itu berjalan tanpa masalah.
sumber
Seringkali dimungkinkan untuk menjalankan gambar yang dapat dieksekusi ARM pada sistem amd64 jika Anda menginstal paket binfmt-support , qemu , dan qemu-user-static :
qemu
kemudian akan melakukan emulasi syscall ketika Anda menjalankan executable. Ini berfungsi untuk sebagian besar binari ARM tetapi ada beberapa yang mungkin tidak berjalan dengan benar.sumber
Kesalahan tersebut dapat terjadi jika semua hal berikut ini benar:
Jika Anda mendapatkan file itu, katakanlah, di arsip - cobalah untuk membukanya di dalam VM, di beberapa direktori di dalam drive virtual, bukan folder yang dipetakan ke hard drive mesin host Anda, misalnya
/myNewDir/
sumber
Anda harus mengkompilasi file Anda menggunakan arsitektur CPU yang sesuai (misalnya x86) dan menyalin file .exe di mesin linux Anda. Kemudian Anda dapat menginstal mono di mesin linux Anda dan mengeluarkan perintah berikut:
sumber
Jika lebih dari satu
java
diinstal pada sistem ini mungkin terjadi dan tidak ditetapkan sebagai default. Pada Ubuntu14.04 LTS saya bisa menyelesaikannya dengan mengeksekusi mengikuti dan memilih yangjava
saya butuhkan.Saya memilih 2 dan menetapkan
openjdk-8
sebagai default. Yang tidak menunjukkanExec format error
.sumber
Ini juga bisa terjadi jika biner menggunakan implementasi libc yang bukan libc, seperti musl. Hari-hari ini masalah khusus ini kemungkinan besar ditemui ketika mencoba menjalankan biner dengan libc dalam wadah Docker dengan gambar berdasarkan alpine. Tidak ada yang dapat dilakukan untuk biner itu sendiri untuk mendukung kedua lingkungan, karena implementasi libc harus selalu dihubungkan secara statis, yaitu dibangun langsung ke dalam biner, karena alasan.
sumber