bash: ./program: negalima įvykdyti dvejetainio failo: Vykdymo formato klaida

Bandau paleisti programą, bet įvyksta tokia klaida:

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

Programos failo rezultatas buvo:

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

Kaip ištaisyti šią klaidą?

Naudoju Ubuntu 14.04.2 (amd64) su VMware. Taip pat bandžiau su Ubuntu i386, bet rezultatas buvo toks pat.

Bandote paleisti ARM architektūrai sukurtą vykdomąją bylą x86-64 architektūroje, o tai tas pats, kas prašyti savo procesoriaus, kuris moka tik anglų kalbą, kad jis duotų nurodymus kinų kalba.

Jei norite paleisti tą vykdomąją programą, turite dvi galimybes:

  1. Gauti x86-64 vykdomosios programos versiją (bet kokiu būdu; jei negalite gauti x86-64 vykdomosios programos versijos, bet galite gauti jos išeities kodą, galite pabandyti ją perkompiliuoti virtualioje mašinoje);

  2. Įdiekite Ubuntu Server for ARM vietoj Ubuntu 14.04.2 (amd64). Tam reikia arba fizinės mašinos su ARM architektūra, arba ją emuliuojančios virtualizavimo programinės įrangos.

Komentarai (0)

Taip gali atsitikti ir bandant paleisti x86-64 vykdomąją programą 32 bitų platformoje.

Vienu konkrečiu atveju parsisiunčiau "Visual Studio Code" ir bandžiau ją paleisti savo "Ubuntu" instaliacijoje, tačiau nesupratau, kad šioje virtualioje mašinoje įdiegiau 32 bitų "Ubuntu". Gavau šią klaidą, bet atsisiuntus 32 bitų versiją, ji veikė be problemų.

Komentarai (0)

Tokia klaida gali įvykti, jei visos toliau išvardytos sąlygos yra teisingos:

  • Vykdomoji programa yra ne failas, o nuoroda
  • Paleidžiate jį virtualioje mašinoje
  • Failas yra bendrinamame aplanke
  • Jūsų kompiuteris yra "Windows".

Jei tą failą gavote, tarkime, archyve, pabandykite jį išpakuoti virtualioje mašinoje, į kokį nors virtualiame diske esantį katalogą, o ne į aplanką, atvaizduotą į jūsų kompiuterio kietąjį diską, pavyzdžiui, /myNewDir/.

Komentarai (1)