Cum se remediază „nu se poate executa fișierul binar: eroare de format Exec” pe Ubuntu



Încercați Instrumentul Nostru Pentru Eliminarea Problemelor

Deși nu ar trebui să se întâmple când utilizați depozitele oficiale apt-get, dacă descărcați software-ul de pe Internet și îl rulați, atunci există șansa să vedeți temutul bash: ./nameOfProgram: nu se poate executa fișierul binar: Eroare de format Exec . Această eroare, care este de obicei urmată de bash: ./nameOfProgram.sh: Permisiunea refuzată sau ceva de genul acesta, indică faptul că Ubuntu nu a putut interfața corect cu binarul pe care l-ați descărcat. Acest lucru se datorează faptului că, deși se pare că este un binar Linux valid, este conceput pentru un chipset diferit de cel acceptat în prezent de nucleul dvs.



Majoritatea persoanelor care folosesc Ubuntu sunt pe procesoare pe 32 de biți sau pe 64 de biți, bazate pe o arhitectură standard pe care Intel a lansat-o, indiferent de cine și-a făcut microcipurile. Este important să ne amintim că procesoarele pe 64 de biți pot rula în modul pe 32 de biți, deci dacă primiți această eroare, chiar dacă aveți un procesor pe 64 de biți, există șansa să rulați o versiune pe 32 de biți a Ubuntu. Câteva comenzi simple sunt suficiente pentru a spune cum funcționează cipul dvs.



Metoda 1: Utilizarea comenzii arc

Dacă nu sunteți familiarizați cu tipul de microprocesor pe care l-ați instalat pe mașină, atunci veți dori mai întâi să utilizați comanda arc din linia de comandă. Veți vedea o singură linie de ieșire returnată numai după executarea acestei comenzi. În multe cazuri, veți vedea i686, ceea ce înseamnă că utilizați un procesor pe 32 de biți și, prin urmare, nu puteți rula binarele x86_64. Dacă vedeți în schimb amd64 sau ceva similar, atunci vă aflați într-un procesor x86_64 și cel puțin teoretic ar trebui să poată rula majoritatea binarelor pe 32 și 64 de biți. Spre deosebire de Microsoft Windows, Ubuntu Linux conține de fapt instrumentele adecvate pentru a permite utilizatorilor de chipset-uri pe 644 de biți să ruleze programe Windows pe 16 biți în sistemul lor de operare și în multe cazuri.



Acești termeni sunt încă adevărați chiar dacă nu utilizați de fapt acel model special de microcip. De exemplu, i686 este modul în care Linux se referă la multe procesoare pe 32 de biți, chiar dacă nu sunt de fapt cipuri Intel 80686. Chiar dacă utilizați tehnologia Intel pe 64 de biți, arch ar putea încă să numească procesorul dvs. un cip amd64. Acest lucru nu indică o eroare și poate fi ignorat în siguranță. Puteți folosi cat / proc / cpuinfo sau mai mult / proc / cpuinfo pentru a afla tipul exact de procesor pe care îl utilizați. Deoarece liniile din acest fișier sunt lungi, poate doriți să apăsați F11 înainte de a-l emite dacă utilizați o fereastră grafică a terminalului. Utilizatorii unei console virtuale, în special cei care lucrează cu serverul Ubuntu, nu vor trebui să se îngrijoreze la fel de mult.

Este posibil să vedeți alte tipuri de ieșiri, care ar putea restricționa opțiunile dvs. atunci când vine vorba de rularea software-ului. Ubuntu a acceptat arhitectura PowerPC pentru cea mai lungă perioadă de timp, care se găsește în unele stații de lucru, precum și în multe mașini clasice Macintosh și mai vechi OS X Macintosh. De fapt, puteți găsi în continuare depozite Ubuntu pentru aceste arhitecturi, deși primesc puțin sprijin astăzi. Cu toate acestea, cel mai probabil nu veți putea rula multe binare Linux pe care le descărcați de pe Internet în afara depozitelor oficiale în acest caz. Asta nu înseamnă că Ubuntu nu funcționează pe aceste mașini, deși poate doriți să vă uitați la distribuția mai ușoară Lubuntu.

Metoda 2: Utilizarea comenzii fișier

Comanda fișier identifică ce conțin diferite fișiere și, de obicei, este foarte precisă. Încercați să identificați fișierul în cauză tastând fișier nameOfProgram pentru a vedea dacă obțineți ELF pe 32 de biți sau ELF pe 64 de biți ca ieșire. Dacă vă spune că este un binar ELF pe 64 de biți și ați primit i686 ca ieșire din comanda arch, atunci nu există nicio modalitate în care îl puteți rula în mod rezonabil pe computer. Dacă utilizați un microprocesor pe 64 de biți care rulează Ubuntu pe 32 de biți, atunci puteți reinstala din punct de vedere tehnic sistemul de operare, deși acesta este un pas extrem de extrem pentru a rula un singur program.



Există, de asemenea, posibilitatea foarte reală, oricât de ușoară ar fi, să întâlniți în schimb un binar care, atunci când încercați să rulați, să arunce caractere nedorite către terminal, chiar dacă ați efectuat o scanare malware. Aceste caractere iau, de obicei, forma unor blocuri în formă de pastilă sau, în mod alternativ, cuburi dreptunghiulare care au valori numerice în ele. Unii informaticieni îl numesc pe acesta din urmă tofu și reprezintă valorile Unicode ale caracterelor pe care tipurile de caractere instalate în prezent nu le vor putea afișa. Dacă terminalul le afișează astfel, puteți fi siguri că aceasta nu este nici o eroare de font, nici nimic legat de malware. Mai degrabă, acest lucru se întâmplă pur și simplu pentru că opcode-ul microprocesorului compilat în interiorul binarului este atât de străin de sistemul dvs. încât nu știe cum să interpreteze o parte din cod.

Cel mai bun mod de a remedia acest lucru este să instalați pachetul adecvat pentru arhitectura dvs. Dacă instalați pachete din interiorul Ubuntu, atunci sistemul apt-get sau managerul grafic Synaptic vă acoperă fără probleme. Dacă descărcați pachete dintr-o altă distribuție, va trebui să o găsiți pe cea potrivită pentru arhitectura dvs. Luați, de exemplu, lista Arch pachetului gvim. În timp ce pachetul implicit prezintă arhitectura x86_64, există și unul pentru chipsetul i686. Acesta va funcționa pe mașini pe 32 de biți care funcționează cu structura de întrerupere Intel, dar amintiți-vă că termenii i686 și 32 de biți nu se includ reciproc tot timpul, deoarece alte chipset-uri pe care Linux le suportă au propriile lor implementări pe 32 de biți.

Utilizatorii care explorează întreaga scenă GNU / Linux ar putea întâlni binare compilate pentru tehnologii mult mai exotice decât acestea. Linux este cu adevărat o scenă de cod multiplataforma, așa că veți vedea OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha și multe alte standarde binare sunt compilate pentru a funcționa. Mai mult decât probabil, nu veți putea rula niciuna dintre acestea, deși ARM este o platformă extrem de populară pentru tablete și smartphone-uri. Este, de asemenea, platforma pe care se bazează Raspberry Pi, ceea ce înseamnă că, dacă de fapt rulați Ubuntu pe un dispozitiv mobil sau distribuția Ubuntu MATE pentru Raspberry Pi, veți avea nevoie de acestea în loc de binare Intel pe 32 de biți sau x86_64.

4 minute citite