Paano Maayos ang 'hindi maaaring magpatupad ng binary file: Exec format error' sa Ubuntu



Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema

Habang hindi ito dapat mangyari kapag gumagamit ng opisyal na mga apt-get repository, kung mag-download ka ng software sa Internet at patakbuhin ito pagkatapos ay may isang pagkakataon na makita mo ang kinakatakutan bash: ./nameOfProgram: hindi maisasagawa ang binary file: Exec format error . Ang error na ito, na karaniwang sinusundan ng bash: ./nameOfProgram.sh: Tinanggihan ang pahintulot o isang bagay na katulad nito, ipinapahiwatig na ang Ubuntu ay hindi nakapag-interface nang tama sa binary na na-download mo. Ito ay dahil habang maliwanag na ito ay isang wastong Linux binary, idinisenyo ito para sa isang iba't ibang chipset kaysa sa kasalukuyang sinusuportahan ng iyong kernel.



Karamihan sa mga tao na gumagamit ng Ubuntu ay nasa 32-bit o 64-bit na mga processor na batay sa isang pamantayang arkitektura na inilabas ng Intel, anuman ang tunay na gumawa ng kanilang mga microchip. Mahalagang tandaan na ang 64-bit na mga processor ay maaaring tumakbo sa 32-bit mode, kaya kung nakukuha mo ang error na ito kahit na mayroon kang isang 64-bit na processor mayroong isang pagkakataon na nagpapatakbo ka ng isang 32-bit na bersyon ng Ubuntu. Ang ilang mga simpleng utos ay kinakailangan upang masabi kung ano ang pagpapatakbo ng iyong maliit na tilad.



Paraan 1: Paggamit ng arch Command

Kung hindi ka pamilyar sa uri ng microprocessor na na-install mo sa iyong machine, unang gugustuhin mong gamitin ang arch command mula sa linya ng utos. Makikita mo lang ang isang linya ng output na bumalik sa iyo pagkatapos na patakbuhin ang utos na ito. Sa maraming mga kaso, makikita mo ang i686, na nangangahulugang nasa isang 32-bit na processor at samakatuwid ay hindi ka maaaring magpatakbo ng x86_64 binary. Kung sa halip ay makakakita ka ng amd64 o ng katulad, sa gayon ay nasa isang processor na x86_64, at dapat na kahit paano sa teoretikal na makapagpatakbo ng karamihan sa 32-bit at 64-bit na mga binary. Hindi tulad ng Microsoft Windows, ang Ubuntu Linux ay talagang naglalaman ng tamang mga tool upang pahintulutan ang mga gumagamit ng 644-bit chipset na magpatakbo ng 16-bit na mga programa sa Windows sa kanilang operating system sa maraming mga kaso din.



Ang mga term na ito ay totoo pa rin kahit na hindi mo talaga ginagamit ang partikular na modelo ng microchip. Halimbawa, ang i686 ay kung paano tumutukoy ang Linux sa maraming mga prosesong 32-bit kahit na hindi talaga sila Intel 80686 chips. Kahit na gumagamit ka ng 64-bit na teknolohiya ng Intel, maaaring tawagan pa rin ng arko ang iyong processor na isang amd64 chip. Hindi ito nagpapahiwatig ng isang error, at maaaring ligtas na balewalain. Maaari kang gumamit ng pusa / proc / cpuinfo o higit pang mga / proc / cpuinfo upang malaman ang eksaktong uri ng processor na iyong ginagamit. Dahil mahaba ang mga linya sa file na ito, baka gusto mong itulak ang F11 bago i-isyu ito kung gumagamit ka ng isang graphic na window ng window. Ang mga gumagamit ng isang virtual console, lalo na ang mga nagtatrabaho sa Ubuntu server, ay hindi na masyadong mag-aalala.

Maaari kang makakita ng ilang iba pang mga uri ng output, na maaaring higit na paghigpitan ang iyong mga pagpipilian pagdating sa pagpapatakbo ng software. Sinuportahan ng Ubuntu ang arkitektura ng PowerPC para sa pinakamahabang oras, na matatagpuan sa ilang mga workstation pati na rin maraming mga Klasikong Macintosh at mas matandang OS X Macintosh machine. Maaari mo pa ring makita ang mga repository ng Ubuntu para sa mga arkitekturang ito, kahit na nakakatanggap sila ng kaunting suporta ngayon. Gayunpaman, malamang na hindi ka makapagpatakbo ng maraming mga binary ng Linux na na-download mo mula sa Internet sa labas ng mga opisyal na repository sa kasong ito. Hindi ito nangangahulugan na ang Ubuntu ay hindi gumagana sa mga machine na ito, kahit na baka gusto mong tingnan ang mas magaan na pamamahagi ng Lubuntu.

Paraan 2: Gamit ang file na Command

Kinikilala ng utos ng file kung ano ang naglalaman ng iba't ibang mga file, at kadalasan ito ay napaka tumpak. Subukang kilalanin ang pinag-uusapan na file sa pamamagitan ng pagta-type ng file nameOfProgram upang makita kung nakakuha ka ng ELF 32-bit o ELF 64-bit bilang output. Kung sasabihin nito sa iyo na ito ay isang ELF 64-bit binary at nakatanggap ka ng i686 bilang output mula sa arch command, kung gayon walang paraan na maaari mo itong makatakbo nang makatwiran sa iyong machine. Kung ikaw ay nasa isang 64-bit microprocessor na nagpapatakbo ng 32-bit Ubuntu, pagkatapos ay maaari mong muling mai-install ang operating system, bagaman ito ay medyo isang matinding hakbang upang magpatakbo ng isang solong programa.



Mayroon ding totoong posibilidad, gayunpaman kaunti, na sa halip ay mahahanap mo ang isang binary na kapag tinangka mong patakbuhin ito ay nagbubuga ng mga junk character sa terminal kahit na nagpatakbo ka ng isang pag-scan ng malware dito. Ang mga character na ito ay karaniwang may anyo ng alinman sa mga bloke na hugis ng lozenge, o kahalili mga hugis-parihaba na cube na may mga halagang bilang sa kanila. Tinawag ng ilang siyentipikong computer ang huli na tofu, at kinakatawan ang mga halagang Unicode ng mga character na hindi maipakita ang iyong kasalukuyang naka-install na mga typeface. Kung ang terminal ay ipinapakita ang mga ito tulad nito, maaari kang makatiyak na ito ay hindi isang error sa font o anumang kinalaman sa malware. Sa halip, ito ay dahil lamang sa naipon na microprocessor opcode sa loob ng binary ay sobrang alien sa iyong system na hindi nito alam kung paano bigyang kahulugan ang ilan sa code.

Ang pinakamahusay na paraan upang ayusin ito ay ang pag-install ng tamang pakete para sa iyong arkitektura. Kung nag-i-install ka ng mga pakete mula sa loob ng Ubuntu, pagkatapos ay ang apt-get system o ang graphic na Synaptic manager ay sakop mo nang walang mga problema. Kung nagda-download ka ng mga pakete mula sa isa pang pamamahagi, kailangan mong hanapin ang tama para sa iyong arkitektura. Halimbawa, kunin ang listahan ng Arch Linux ng gvim package. Habang nagtatampok ang default na pakete ng x86_64 na arkitektura, mayroon ding isa para sa i686 chipset. Ang isang ito ay gagana sa 32-bit machine na gagana sa Intel makagambala istraktura, ngunit tandaan na ang mga katagang i686 at 32-bit ay hindi kapwa kasama sa lahat ng oras dahil ang iba pang mga chipset na sinusuportahan ng Linux ay talagang nagtatampok ng kanilang sariling 32-bit na pagpapatupad.

Ang mga gumagamit na nagsisiyasat sa buong eksena ng GNU / Linux ay maaaring makatagpo ng mga binary na naipon para sa mas maraming mga kakaibang teknolohiya kaysa sa mga ito. Ang Linux ay tunay na isang cross-platform code na eksena, kaya makikita mo ang OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha at marami pang ibang mga pamantayan ng binary na pinagsama-sama upang gumana. Mas malaki kaysa sa posibilidad, hindi mo mapapatakbo ang anuman sa mga ito, kahit na ang ARM ay isang napakapopular na platform ng tablet at smartphone. Ito rin ang platform na nakabatay sa paligid ng Raspberry Pi, na nangangahulugang kung nagpapatakbo ka talaga ng Ubuntu sa isang mobile device o pamamahagi ng Ubuntu MATE para sa Raspberry Pi talagang kakailanganin mo ang mga ito sa halip na mga Intel 32-bit o x86_64 binary.

Basahin ang 4 na minuto