Vodniki

Kako popraviti, da "ne morem zagnati binarne datoteke: napaka formata Exec" v Ubuntuju

Čeprav se to ne bi smelo zgoditi pri uporabi uradnih skladišč apt-get, če programsko opremo prenesete iz interneta in jo zaženete, obstaja verjetnost, da boste videli strašljive bash: ./nameOfProgram: ne more izvršiti binarne datoteke: napaka v formatu Exec. Ta napaka, ki ji običajno sledi bash: ./nameOfProgram.sh: Dovoljenje zavrnjeno ali kaj podobnega, pomeni, da Ubuntu ni mogel pravilno vzpostaviti vmesnika z binarno datoteko, ki ste jo prenesli. To je zato, ker je očitno veljaven binarni sistem Linux, vendar je zasnovan za drugačen nabor čipov, kot ga trenutno podpira vaše jedro.

Večina ljudi, ki uporabljajo Ubuntu, je na 32-bitnih ali 64-bitnih procesorjih, ki temeljijo na standardni arhitekturi, ki jo je Intel izdal, ne glede na to, kdo je dejansko izdelal njihove mikročipe. Pomembno je vedeti, da lahko 64-bitni procesorji delujejo v 32-bitnem načinu, zato če imate to napako, čeprav imate 64-bitni procesor, obstaja verjetnost, da imate 32-bitno različico Ubuntuja. Nekaj ​​preprostih ukazov je dovolj, da ugotovite, kako deluje vaš čip.

1. metoda: Uporaba ukaza arch

Če niste seznanjeni z vrsto mikroprocesorja, ki ste ga namestili na svojo napravo, boste najprej želeli uporabiti ukaz arch iz ukazne vrstice. Po zagonu tega ukaza boste videli samo eno vrstico izhoda. V mnogih primerih boste videli i686, kar pomeni, da ste na 32-bitnem procesorju in zato ne morete zagnati binarnih datotek x86_64. Če namesto tega vidite amd64 ali kaj podobnega, potem uporabljate procesor x86_64 in bi vsaj teoretično morali imeti možnost izvajati večino 32-bitnih in 64-bitnih binarnih datotek. Za razliko od Microsoftovega sistema Windows Ubuntu Linux dejansko vsebuje ustrezna orodja, ki uporabnikom 644-bitnih naborov čipov tudi v mnogih primerih omogočajo zagon 16-bitnih programov Windows v njihovem operacijskem sistemu.

Ti izrazi še vedno veljajo, tudi če dejansko ne uporabljate določenega modela mikročipa. Na primer, i686 je način, kako se Linux sklicuje na številne 32-bitne procesorje, tudi če dejansko niso čipi Intel 80686. Tudi če uporabljate 64-bitno tehnologijo Intel, lahko Arch še vedno imenuje vaš procesor čip amd64. To ne pomeni napake in jo lahko varno prezrete. Lahko uporabite mačko / proc / cpuinfo ali več / proc / cpuinfo da ugotovite natančno vrsto procesorja, ki ga uporabljate. Ker so vrstice v tej datoteki dolge, boste morda želeli pred izdajo potisniti F11, če uporabljate grafično okno terminala. Uporabnikom navidezne konzole, zlasti tistim, ki delajo s strežnikom Ubuntu, ne bo treba toliko skrbeti.

Morda boste videli nekatere druge vrste izhodnih podatkov, ki lahko dodatno omejijo vaše možnosti pri zagonu programske opreme. Ubuntu je najdlje podpiral arhitekturo PowerPC, ki jo najdemo na nekaterih delovnih postajah, pa tudi na številnih Classic Macintosh in starejših OS X Macintosh strojih. Pravzaprav še vedno lahko najdete repozitorije Ubuntu za te arhitekture, čeprav danes prejemajo malo podpore. Vendar v tem primeru večina binarnih datotek Linuxa, ki jih prenesete iz interneta, verjetno ne boste mogli zagnati zunaj uradnih skladišč. To ne pomeni, da Ubuntu na teh strojih ne deluje, čeprav boste morda želeli pogledati lažjo distribucijo Lubuntu.

2. način: Uporaba ukaza datoteke

Ukaz datoteka določa, kaj vsebujejo različne datoteke, in je običajno zelo natančen. Poskusite identificirati zadevno datoteko tako, da jo vnesete nameOfProgram da preverite, ali dobite 32-bitno ali 64-bitno ELF kot izhod. Če vam pove, da gre za 64-bitno binarno datoteko ELF in ste kot izhod iz ukaza arch prejeli i686, ga nikakor ne morete razumno zagnati na svojem računalniku. Če uporabljate 64-bitni mikroprocesor z 32-bitnim Ubuntujem, lahko tehnično znova namestite operacijski sistem, čeprav je to nekoliko skrajni korak za zagon enega programa.

Obstaja tudi zelo resnična možnost, pa naj bo še tako majhna, da boste namesto tega naleteli na binarno datoteko, ki ob poskusu zagona izpušča neželene znake v terminal, tudi če ste na njem izvedli pregled zlonamerne programske opreme. Ti znaki so običajno v obliki blokov v obliki pastil ali pa pravokotne kocke, ki imajo v sebi številčne vrednosti. Nekateri računalničarji slednje imenujejo tofu in predstavljajo vrednosti znakov Unicode, ki jih vaše trenutno nameščene pisave ne bodo mogle prikazati. Če jih terminal prikazuje takole, ste lahko prepričani, da to ni niti napaka pisave niti kaj skupnega z zlonamerno programsko opremo. To je preprosto zato, ker je sestavljena mikroprocesorska operacijska koda znotraj binarnega sistema tako tuja vašemu sistemu, da ne zna razlagati nekatere kode.

Najboljši način za odpravo tega je namestitev ustreznega paketa za vašo arhitekturo. Če nameščate pakete znotraj Ubuntuja, vas sistem apt-get ali grafični upravitelj Synaptic brez težav pokrije. Če prenašate pakete iz druge distribucije, boste morali najti pravega za svojo arhitekturo. Vzemimo na primer seznam Linux-ovega paketa gvim podjetja Arch Linux. Medtem ko privzeti paket vsebuje arhitekturo x86_64, obstaja tudi ta za nabor čipov i686. Ta bo deloval na 32-bitnih računalnikih, ki delujejo z Intelovo prekinitveno strukturo, vendar ne pozabite, da se izraza i686 in 32-bit ne vključujeta ves čas, saj drugi nabori čipov, ki jih podpira Linux, dejansko vsebujejo svoje 32-bitne izvedbe.

Uporabniki, ki raziskujejo celotno sceno GNU / Linux, lahko naletijo na binarne datoteke, sestavljene za veliko bolj eksotične tehnologije od teh. Linux je resnično platforma med različnimi platformami, zato boste videli OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha in številne druge standardne binarne datoteke, sestavljene za delo. Več kot verjetno ne boste mogli zagnati nobenega od teh, čeprav je ARM izjemno priljubljena tablična in pametna platforma. To je tudi platforma, na kateri temelji Raspberry Pi, kar pomeni, da če dejansko uporabljate Ubuntu v mobilni napravi ali distribucijo Ubuntu MATE za Raspberry Pi, jih boste dejansko potrebovali namesto 32-bitnih binarnih datotek Intel ali x86_64.

$config[zx-auto] not found$config[zx-overlay] not found