bash: ./program: ikili dosyayı çalıştıramıyor: Exec format hatası

66

Bir programı çalıştırmaya çalışıyorum ama böyle bir hata oluştu:

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

file program öğesinin sonucu:

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 çalıştım ama sonuç aynıydı.

    
sordu Soongeun Hwang 15.07.2015 07:30

6 cevap

56

Bir x86-64 mimarisinde ARM mimarisi için derlenmiş bir yürütülebilir dosyayı çalıştırmaya çalışıyorsunuz. Bu, yalnızca İngilizce'yi yalnızca Çince konuşarak yönlendiren işlemcinizin sorulmasını istiyor.

Bu yürütülebilir 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ü alın (herhangi bir ortama göre; eğer yürütülebilir dosyanın x86-64 sürümünü alamıyorsanız, ancak kaynak kodunu edinebilirsiniz) sanal makinede yeniden derleyin);

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

verilen cevap kos 15.07.2015 07:39
19

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

Belirli bir örnekte, Visual Studio Kodunu indirdim ve Ubuntu yüklememde çalıştırmayı denedim, ancak bu VM'de 32 bit Ubuntu yüklediğimi fark etmemiştim. Bu hatayı aldım, ancak 32 bit sürümü indirdikten sonra, sorunsuz çalıştı.

    
verilen cevap Hughie Coles 11.09.2015 01:44
6

binfmt-support , qemu ve qemu-kullanıcı-statik < img src="https://hostmar.co/software-small"> paketleri:

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

qemu daha sonra yürütülebilir dosyayı çalıştırdığınızda sistem çağrısı emülasyonunu gerçekleştirecektir. Bu çoğu ARM ikili dosyaları için çalışır, ancak düzgün çalışmayabilecek birkaç tane vardır.

    
verilen cevap Nathan Osman 27.10.2016 08:41
6

Aşağıdakilerin tümü doğruysa böyle bir hata oluşabilir:

  • Yürütülebilir dosya değil, bağlantı
  • Çalıştırmayı sanal makinede çalıştır
  • Dosya, paylaşılan klasörde bulunur
  • Ana makineniz Windows.

Eğer bu dosyayı aldıysanız, arşivde diyelim ki, sanal sürücü içindeki bir dizinde, sanal makinenin içindeki makinenin sabit sürücüsüne eşlenmiş klasör değil, örneğin /myNewDir/

    
verilen cevap Pavel 13.11.2015 23:22
2

Sistemde% 1'den daha fazla co_de% yüklüyse, bu olabilir ve varsayılan olarak ayarlanamaz. Ubuntu14.04 LTS'de, aşağıdakileri uygulayarak ve ihtiyacım olan java 'yi seçerek çözebiliyordum.

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çiyorum ve java değerini varsayılan olarak ayarlayın. Bu, openjdk-8 değerini göstermedi.

    
verilen cevap lambzee 06.06.2016 15:43
1

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

mono myprogram.exe
    
verilen cevap user3578181 28.02.2016 20:49

Etiketlerdeki diğer soruları oku