Vejledninger

Sådan løses 'kan ikke udføre binær fil: Exec-formatfejl' på Ubuntu

Selvom det ikke skulle ske, når du bruger de officielle apt-get repositories, hvis du downloader software fra Internettet og kører det, er der en chance for, at du vil se den frygtede bash: ./nameOfProgram: kan ikke udføre binær fil: Exec-formatfejl. Denne fejl, som normalt følges af bash: ./nameOfProgram.sh: Tilladelse nægtet eller noget lignende angiver, at Ubuntu ikke kunne interface korrekt med den binære, du downloadede. Dette skyldes, at selvom det tilsyneladende er en gyldig Linux-binær, er den designet til et andet chipsæt, end din kerne i øjeblikket understøtter.

De fleste mennesker, der bruger Ubuntu, er på 32-bit eller 64-bit processorer baseret på en standardarkitektur, som Intel frigav, uanset hvem der faktisk lavede deres mikrochips. Det er vigtigt at huske, at 64-bit processorer kan køre i 32-bit-tilstand, så hvis du får denne fejl, selvom du har en 64-bit processor, er der en chance for at du kører en 32-bit version af Ubuntu. Et par enkle kommandoer er alt, hvad der kræves for at fortælle, hvad din chip fungerer som.

Metode 1: Brug af buekommandoen

Hvis du ikke er bekendt med den type mikroprocessor, du har installeret på din maskine, vil du først bruge buekommandoen fra kommandolinjen. Du ser kun en enkelt linje med output returneret til dig, når du har kørt denne kommando. I mange tilfælde vil du se i686, hvilket betyder, at du har en 32-bit processor og derfor ikke kan køre x86_64-binære filer. Hvis du i stedet ser amd64 eller noget lignende, er du på en x86_64-processor og skal i det mindste teoretisk kunne køre de fleste 32-bit og 64-bit binære filer. I modsætning til Microsoft Windows indeholder Ubuntu Linux faktisk de rigtige værktøjer, der tillader brugere af 644-bit chipsæt at køre 16-bit Windows-programmer i deres operativsystem også i mange tilfælde.

Disse vilkår gælder stadig, selvom du ikke rent faktisk bruger den pågældende mikrochipmodel. For eksempel er i686, hvordan Linux henviser til mange 32-bit processorer, selvom de faktisk ikke er Intel 80686-chips. Selvom du bruger 64-bit Intel-teknologi, kan arch muligvis stadig kalde din processor en amd64-chip. Dette indikerer ikke en fejl og kan ignoreres sikkert. Du kan bruge kat / proc / cpuinfo eller mere / proc / cpuinfo for at finde ud af den nøjagtige type processor, du bruger. Da linjerne i denne fil er lange, vil du måske skubbe F11, før du udsteder den, hvis du bruger et grafisk terminalvindue. Brugere af en virtuel konsol, især dem der arbejder med Ubuntu-server, behøver ikke bekymre sig lige så meget.

Du kan muligvis se nogle andre typer output, som yderligere kan begrænse dine muligheder, når det kommer til at køre software. Ubuntu understøttede PowerPC-arkitektur i længst tid, hvilket findes i nogle arbejdsstationer såvel som mange Classic Macintosh og ældre OS X Macintosh-maskiner. Du kan faktisk stadig finde Ubuntu-arkiver til disse arkitekturer, selvom de får lidt support i dag. Du vil dog højst sandsynligt ikke kunne køre mange Linux-binære filer, du downloader fra Internettet uden for de officielle opbevaringssteder i dette tilfælde. Det betyder ikke, at Ubuntu ikke fungerer på disse maskiner, selvom du måske vil se på den lettere Lubuntu-distribution.

Metode 2: Brug af kommandofilen

Filkommandoen identificerer, hvad forskellige filer indeholder, og den er normalt meget nøjagtig. Prøv at identificere den pågældende fil ved at skrive filen nameOfProgram for at se om du får ELF 32-bit eller ELF 64-bit som output. Hvis det fortæller dig, at det er en ELF 64-bit binær, og du modtog i686 som output fra buekommandoen, er der ingen måde, du med rimelighed kan køre den på din maskine. Hvis du er på en 64-bit mikroprocessor, der kører 32-bit Ubuntu, kan du teknisk geninstallere operativsystemet, selvom dette er lidt af et ekstremt trin for at køre et enkelt program.

Der er også den meget reelle mulighed, uanset hvor ringe det er, at du i stedet måske støder på en binær, der når du forsøger at køre, udspyder uønskede tegn til terminalen, selvom du har kørt en malware-scanning på den. Disse tegn har normalt form af enten sugetabletter eller alternativt rektangulære terninger, der har numeriske værdier. Nogle computerforskere kalder sidstnævnte tofu og repræsenterer Unicode-værdierne for tegn, som dine aktuelt installerede skrifttyper ikke kan vise. Hvis terminalen viser dem sådan, kan du være sikker på, at dette hverken er en fontfejl eller noget, der har at gøre med malware. Snarere er det simpelthen fordi den kompilerede mikroprocessoropkode inde i binærsystemet er så fremmed for dit system, at det ikke ved, hvordan man fortolker noget af koden.

Den bedste måde at løse dette på er at installere den rigtige pakke til din arkitektur. Hvis du installerer pakker inde fra Ubuntu, har apt-get-systemet eller den grafiske Synaptic-manager dækket dig uden problemer. Hvis du downloader pakker fra en anden distribution, skal du finde den rigtige til din arkitektur. Tag for eksempel Arch Linux's liste over gvim-pakken. Mens standardpakken har x86_64-arkitekturen, er der også en til i686-chipsættet. Denne fungerer på 32-bit maskiner, der fungerer med Intel interrupt-strukturen, men husk at udtrykkene i686 og 32-bit ikke er gensidigt inkluderende hele tiden, da andre chipsæt, som Linux understøtter, faktisk har deres egne 32-bit implementeringer.

Brugere, der udforsker hele GNU / Linux-scenen, kan komme på tværs af binære filer, der er sammensat til langt mere eksotiske teknologier end disse. Linux er virkelig en platformscodescodescene, så du kan se OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha og mange andre standardbinarier er samlet til at arbejde med. Mere end sandsynligt vil du ikke kunne køre nogen af ​​disse, selvom ARM er en ekstremt populær tablet- og smartphone-platform. Det er også den platform, som Raspberry Pi er baseret omkring, hvilket betyder, at hvis du faktisk kører Ubuntu på en mobilenhed eller Ubuntu MATE-distributionen til Raspberry Pi, skal du faktisk bruge disse i stedet for Intel 32-bit eller x86_64-binære filer.

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