bash: ./program: ikili dosyayı yürütemiyor: Yürütme biçimi hatası


92

Bir program çalıştırmaya çalışıyorum, ancak böyle bir hata oluyor:

bash: ./program: cannot execute binary file: Exec format error

Sonucu file program:

program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped

Bu hatayı nasıl düzeltebilirim?

VMware ile Ubuntu 14.04.2 (amd64) kullanıyorum. Ubuntu i386 ile de denedim, ancak sonuç aynıydı.


4
Bir ARM çalıştırılabilir, yani yanlış çalıştırılabilir formatı indirdiniz veya yanlış platform için derlediniz. Doğru çalıştırılabilir olması veya yeniden derlemeniz gerekir.
Karl Richter

Yanıtlar:


77

Bir x86-64 mimarisinde bir ARM mimarisi için derlenmiş bir çalıştırılabilir dosya çalıştırmayı deniyorsunuz, bu da işlemcinizden yalnızca İngilizce okuyan ve Çince'de yol tarif etmesi isteyen kişilere sormak gibi.

Bu çalıştırılabilir dosyayı çalıştırmanız gerekirse, iki seçeneğiniz vardır:

  1. Yürütülebilir dosyanın x86-64 sürümünü edinin (herhangi bir şekilde; yürütülebilir dosyanın x86-64 sürümünü edemiyorsanız ancak kaynak kodunu alabilirsiniz, sanal makinede yeniden derlemeyi deneyebilirsiniz );

  2. Yükleme ARM için Ubuntu Sunucu Ubuntu 14.04.2 (amd64) yerine. Bu, bir ARM mimarisinde çalışan bir fiziksel makine veya onu taklit edebilecek bir sanallaştırma yazılımı gerektirir.


23

Bu, 32-bit bir platformda x86-64 çalıştırılabilir çalıştırmayı denediğinizde de oluşabilir.

Belirli bir örnekte, Visual Studio Kodunu indirdim ve Ubuntu kurulumumda çalıştırmayı denedim, ancak bu VM'ye 32-bit Ubuntu kurduğumu fark etmemiştim. Bu hatayı aldım, ancak 32 bit sürümü indirdikten sonra sorunsuz çalıştı.


8

Binfmt-supportBinfmt desteğini kurun , qemuQemu yükleyin ve qemu-user-staticQemu-user-static'ı yükleyin paketlerini kurarsanız , amd64 sisteminde ARM çalıştırılabilir bir görüntü çalıştırmak genellikle mümkündür :

sudo apt install binfmt-support qemu qemu-user-static

qemuçalıştırılabilir çalıştırdığınızda, daha sonra sistem çağrısı öykünmesi gerçekleştirir. Bu, çoğu ARM ikilisi için işe yarar ancak doğru şekilde çalışmayabilecek birkaç tane vardır.


sudo apt-get install binfmt desteği qemu qemu-kullanıcı-statik
Momin Al Aziz

7

Aşağıdakilerin tümü doğruysa, bu hata oluşabilir:

  • Yürütülebilir bir dosya değil, bir bağlantıdır
  • VM'de çalıştırıyorsun
  • Dosya paylaşılan klasörde bulunur
  • Ev sahibiniz Windows.

Bu dosyayı aldıysanız, diyelim ki, arşivde - sanal makinenin içindeki bir dizinde, ana makinenizin sabit diskine eşlenmiş klasörde değil, VM içinde açmayı deneyin. /myNewDir/


Bu oldukça yardımcı oldu. Benim için o çalıştırılabilir dosyaya bir kısayol (link) oluşturdum, sonra kısayolu çalıştırmak bana hata verdi.
Duc Tran

2

Dosyanızı uygun bir CPU mimarisi (örneğin x86) kullanarak derlemeniz ve .exe dosyasını linux makinenize kopyalamanız gerekir. Ardından linux makinenize mono yükleyebilir ve aşağıdaki komutu verebilirsiniz:

mono myprogram.exe

2

javaSistemde birden fazla kurulu ise bu gerçekleşebilir ve varsayılan olarak ayarlanmamış olabilir. Ubuntu14.04 LTS'de izleyerek ve javaihtiyaç duyduğum seçimi seçerek çözdüm .

sudo update-alternatives --config java
[sudo] password for user: 
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

2'yi seçip openjdk-8varsayılan olarak ayarlıyorum . Hangi göstermedi Exec format error.


0

Bu aynı zamanda ikili, musl gibi libc olmayan bir libc uygulaması kullanıyorsa da olabilir. Bu günlerde bu özel problem muhtemelen Alpc'e dayanan bir görüntü içeren bir Docker konteynerinde libc ile bir ikili çalıştırmaya çalışırken karşılaşılmaktadır. Her iki ortamı da desteklemek için ikiliye kendi başına yapılabilecek hiçbir şey yoktur, çünkü libc uygulaması her zaman statik olarak, yani nedenlerden dolayı doğrudan ikili dosyaya bağlanmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.