Oppaat

Kuinka korjata 'ei voi suorittaa binääritiedostoa: Exec-muotoinen virhe' Ubuntussa

Vaikka sen ei pitäisi tapahtua käytettäessä virallisia apt-get-arkistoja, jos lataat ohjelmiston Internetistä ja suoritat sen, on mahdollista, että näet pelätyn bash: ./nameOfProgram: ei voi suorittaa binääritiedostoa: Exec-muotoinen virhe. Tämä virhe, jota yleensä seuraa bash: ./nameOfProgram.sh: Lupa evätty tai jotain sellaista, osoittaa, että Ubuntu ei pystynyt toimimaan oikein lataamasi binaarin kanssa. Tämä johtuu siitä, että vaikka se on ilmeisesti kelvollinen Linux-binaari, se on suunniteltu eri piirisarjalle kuin ytimesi tällä hetkellä tukee.

Useimmat Ubuntua käyttävät ihmiset käyttävät 32- tai 64-bittisiä prosessoreita, jotka perustuvat Intelin julkaisemaan standardiarkkitehtuuriin, riippumatta siitä, kuka tosiasiallisesti valmisti mikrosirunsa. On tärkeää muistaa, että 64-bittiset prosessorit voivat toimia 32-bittisessä tilassa, joten jos saat tämän virheen, vaikka sinulla on 64-bittinen prosessori, on mahdollista, että käytät 32-bittistä Ubuntun versiota. Muutama yksinkertainen komento on kaikki mitä tarvitset kertoa millainen siru toimii.

Tapa 1: Arch-komennon käyttäminen

Jos et tiedä koneellesi asennetun mikroprosessorin tyyppiä, sinun on ensin käytettävä komentorivin arch-komentoa. Tämän komennon suorittamisen jälkeen näet vain yhden lähtö rivin. Monissa tapauksissa näet i686: n, mikä tarkoittaa, että käytät 32-bittistä prosessoria etkä voi siksi suorittaa x86_64-binaareja. Jos näet sen sijaan amd64: n tai jotain vastaavaa, olet x86_64-prosessorilla, ja sinun pitäisi ainakin teoriassa pystyä suorittamaan useimmat 32- ja 64-bittiset binaarit. Toisin kuin Microsoft Windows, Ubuntu Linux sisältää oikeat työkalut, joiden avulla 644-bittisten piirisarjojen käyttäjät voivat käyttää 16-bittisiä Windows-ohjelmia käyttöjärjestelmässään myös monissa tapauksissa.

Nämä ehdot ovat edelleen totta, vaikka et tosiasiassa käytä kyseistä mikrosirumallia. Esimerkiksi i686 on, miten Linux viittaa moniin 32-bittisiin prosessoreihin, vaikka ne eivät itse asiassa olisikaan Intel 80686 -piirejä. Vaikka käytät 64-bittistä Intel-tekniikkaa, arch saattaa silti kutsua prosessoriasi amd64-siruksi. Tämä ei tarkoita virhettä, ja se voidaan ohittaa turvallisesti. Voit käyttää kissaa / proc / cpuinfo tai enemmän / proc / cpuinfo saadaksesi selville käyttämäsi prosessorin tyypin. Koska tämän tiedoston rivit ovat pitkiä, kannattaa ehkä painaa F11 ennen julkaisua, jos käytät graafista pääteikkunaa. Virtuaalikonsolin käyttäjien, etenkin Ubuntu-palvelimen kanssa työskentelevien, ei tarvitse huolehtia yhtä paljon.

Saatat nähdä joitain muuntyyppisiä lähtöjä, jotka saattavat rajoittaa vaihtoehtoja ohjelmiston ajamisessa. Ubuntu tuki pisimpään PowerPC-arkkitehtuuria, joka löytyy joistakin työasemista sekä monista Classic Macintosh- ja vanhemmista OS X Macintosh -laitteista. Näille arkkitehtuureille voi silti löytää Ubuntun arkistoja, vaikka ne saavatkin tänään vähän tukea. Tässä tapauksessa et kuitenkaan todennäköisesti voi käyttää monia Internetistä lataamiasi Linux-binäärejä virallisten arkistojen ulkopuolella. Tämä ei tarkoita, että Ubuntu ei toimi näillä koneilla, vaikka haluat ehkä tarkastella kevyempää Lubuntu-jakelua.

Tapa 2: Tiedostokomennon käyttäminen

Tiedosto-komento tunnistaa, mitä eri tiedostot sisältävät, ja se on yleensä erittäin tarkka. Yritä tunnistaa kyseinen tiedosto kirjoittamalla tiedosto nameOfProgram nähdäksesi, saatko ELF: n 32-bittisen vai ELF: n 64-bittisen lähdön. Jos se kertoo sinulle, että se on ELF 64-bittinen binaarinen ja että sait i686: n arch-komennon ulostulona, ​​et voi mitenkään käyttää sitä kohtuudella koneellasi. Jos olet 64-bittisessä mikroprosessorissa, jossa on 32-bittinen Ubuntu, voit asentaa käyttöjärjestelmän teknisesti uudelleen, vaikka tämä onkin hieman äärimmäinen askel yhden ohjelman ajamiseksi.

On myös todellinen mahdollisuus, vaikka se onkin pieni, että saatat sen sijaan törmätä binääriin, joka yritettäessä suorittaa se roskaisee roskapostimerkkejä päätelaitteeseen, vaikka olet suorittanut haittaohjelmien skannauksen siinä. Nämä merkit ovat yleensä joko pastillin muotoisia lohkoja tai vaihtoehtoisesti suorakaiteen muotoisia kuutioita, joissa on numeeriset arvot. Jotkut tietojenkäsittelytietäjät kutsuvat jälkimmäistä tofuksi ja edustavat sellaisten merkkien Unicode-arvoja, joita nykyiset asennetut kirjasimesi eivät voi näyttää. Jos pääte näyttää niitä tällä tavoin, voit olla varma, että tämä ei ole kirjasinvirhe eikä mitään tekemistä haittaohjelmien kanssa. Pikemminkin tämä johtuu yksinkertaisesti siitä, että binäärin sisällä oleva käännetty mikroprosessorin opkoodi on niin vieras järjestelmällesi, että se ei osaa tulkita jotakin koodia.

Paras tapa korjata tämä on asentaa oikea paketti arkkitehtuurillesi. Jos asennat paketteja Ubuntun sisäpuolelta, apt-get-järjestelmä tai graafinen Synaptic-hallintaohjelma ovat kattaneet sinut ongelmitta. Jos lataat paketteja toisesta jakelusta, sinun on löydettävä oikea arkkitehtuurillesi. Otetaan esimerkiksi Arch Linuxin luettelo gvim-paketista. Vaikka oletuspaketissa on x86_64-arkkitehtuuri, on myös yksi i686-piirisarjalle. Tämä toimii 32-bittisissä koneissa, jotka toimivat Intel-keskeytysrakenteen kanssa, mutta muista, että termit i686 ja 32-bittiset eivät ole toisiaan täydentäviä koko ajan, koska muut Linux-tukemat piirisarjat todella sisältävät omat 32-bittiset toteutuksensa.

Käyttäjät, jotka tutkivat koko GNU / Linux-kohtausta, saattavat törmätä binääreihin, jotka on koottu paljon eksoottisemmille tekniikoille kuin nämä. Linux on todellakin alustojen välinen koodikohtaus, joten näet OpenRISC: n, MIPS: n, SPARC: n, M32R: n, MN103: n, ARM: n, ARC: n, Alphan ja monet muut standardien binäärit on koottu toimimaan. Enemmän kuin todennäköistä, et voi käyttää mitään näistä, vaikka ARM on erittäin suosittu tabletti- ja älypuhelinalusta. Se on myös foorumi, jonka ympärille Raspberry Pi perustuu, mikä tarkoittaa, että jos käytät tosiasiallisesti Ubuntua mobiililaitteella tai Ubuntu MATE -jakelua Raspberry Pi: lle, tarvitset itse asiassa näitä 32-bittisten tai x86_64-binaarien sijaan.