Guider

Slik løser du ‘kan ikke utføre binær fil: Exec-formatfeil’ på Ubuntu

Selv om det ikke skal skje når du bruker de offisielle apt-get repositoriene, er det en sjanse for at du ser den fryktede mens du laster ned programvare fra Internett og kjører den. bash: ./nameOfProgram: kan ikke utføre binær fil: Exec-formatfeil. Denne feilen, som vanligvis følges av bash: ./nameOfProgram.sh: Tillatelse nektet eller noe lignende, indikerer at Ubuntu ikke var i stand til å grensesnittet riktig med binærprogrammet du lastet ned. Dette er fordi den tilsynelatende er en gyldig Linux-binær, men den er designet for et annet brikkesett enn kjernen din for øyeblikket støtter.

De fleste som bruker Ubuntu, er på 32-biters eller 64-biters prosessorer basert på en standardarkitektur som Intel ga ut, uavhengig av hvem som faktisk laget mikrobrikkene sine. Det er viktig å huske at 64-biters prosessorer kan kjøre i 32-bit-modus, så hvis du får denne feilen, selv om du har en 64-biters prosessor, er det en sjanse for at du kjører en 32-biters versjon av Ubuntu. Noen få enkle kommandoer er alt som trengs for å fortelle hva brikken din fungerer som.

Metode 1: Bruke buekommandoen

Hvis du ikke er kjent med typen mikroprosessor du har installert på maskinen din, vil du først bruke buekommandoen fra kommandolinjen. Du ser bare en enkelt linje med utdata returnert til deg etter at du har kjørt denne kommandoen. I mange tilfeller ser du i686, noe som betyr at du bruker en 32-biters prosessor og derfor ikke kan kjøre x86_64-binærfiler. Hvis du i stedet ser amd64 eller noe lignende, er du på en x86_64-prosessor og burde i det minste teoretisk kunne kjøre de fleste 32-biters og 64-biters binærfiler. I motsetning til Microsoft Windows inneholder Ubuntu Linux faktisk de riktige verktøyene for å tillate brukere av 644-bit brikkesett å kjøre 16-biters Windows-programmer i operativsystemet i mange tilfeller også.

Disse vilkårene gjelder fremdeles, selv om du ikke bruker den aktuelle modellen for mikrochip. For eksempel er i686 hvordan Linux refererer til mange 32-biters prosessorer, selv om de ikke egentlig er Intel 80686-brikker. Selv om du bruker 64-biters Intel-teknologi, kan arch fremdeles kalle prosessoren din for en amd64-brikke. Dette indikerer ikke en feil, og kan ignoreres trygt. Du kan bruke katt / proc / cpuinfo eller mer / proc / cpuinfo for å finne ut nøyaktig hvilken prosessor du bruker. Siden linjene i denne filen er lange, vil du kanskje trykke F11 før du utsteder den hvis du bruker et grafisk terminalvindu. Brukere av en virtuell konsoll, spesielt de som jobber med Ubuntu-serveren, trenger ikke å bekymre seg like mye.

Du kan se noen andre typer utdata, noe som kan begrense alternativene dine ytterligere når det gjelder å kjøre programvare. Ubuntu støttet PowerPC-arkitekturen i lengst tid, som finnes i noen arbeidsstasjoner, så vel som i mange Classic Macintosh og eldre OS X Macintosh-maskiner. Du kan faktisk fremdeles finne Ubuntu-arkiver for disse arkitekturene, selv om de får liten støtte i dag. Imidlertid vil du mer enn sannsynlig ikke kunne kjøre mange Linux-binære filer du laster ned fra Internett utenfor de offisielle arkivene i dette tilfellet. Det betyr ikke at Ubuntu ikke fungerer på disse maskinene, selv om du kanskje vil se på den lettere Lubuntu-distribusjonen.

Metode 2: Bruke filen Command

Filkommandoen identifiserer hva forskjellige filer inneholder, og den er vanligvis veldig nøyaktig. Prøv å identifisere den aktuelle filen ved å skrive filen nameOfProgram for å se om du får ELF 32-bit eller ELF 64-bit som utgang. Hvis det forteller deg at det er en ELF 64-bit binær og du mottok i686 som utdata fra buekommandoen, er det ingen måte du med rimelighet kan kjøre den på maskinen din. Hvis du er på en 64-biters mikroprosessor som kjører 32-biters Ubuntu, kan du teknisk installere operativsystemet på nytt, selv om dette er litt av et ekstremt trinn for å kjøre et enkelt program.

Det er også den veldig reelle muligheten, uansett hvor liten, at du i stedet kan komme over en binær som når du prøver å kjøre ut, kaster den ut søppelkarakterer til terminalen, selv om du har kjørt en malware-skanning på den. Disse tegnene har vanligvis form av enten pastillformede blokker, eller alternativt rektangulære terninger som har numeriske verdier i seg. Noen datavitenskapere kaller sistnevnte tofu, og representerer Unicode-verdiene til tegn som de for øyeblikket installerte skriftene ikke vil kunne vise. Hvis terminalen viser dem slik, kan du være trygg på at dette verken er en skriftfeil eller noe som har med malware å gjøre. Snarere er dette rett og slett fordi den kompilerte mikroprosessoropkoden inne i binærsystemet er så fremmed for systemet ditt at det ikke vet hvordan man skal tolke noe av koden.

Den beste måten å fikse dette på er å installere riktig pakke for arkitekturen din. Hvis du installerer pakker fra Ubuntu, har apt-get-systemet eller den grafiske Synaptic Manager dekket deg uten problemer. Hvis du laster ned pakker fra en annen distribusjon, må du finne den rette for arkitekturen din. Ta for eksempel Arch Linux's liste over gvim-pakken. Mens standardpakken har x86_64-arkitekturen, er det også en for i686-brikkesettet. Denne vil fungere på 32-biters maskiner som fungerer med Intel-avbruddsstrukturen, men husk at begrepene i686 og 32-bit ikke er gjensidig inkluderende hele tiden, siden andre brikkesett Linux-støtter faktisk har sine egne 32-bits implementeringer.

Brukere som utforsker hele GNU / Linux-scenen, kan komme over binærfiler samlet for langt mer eksotiske teknologier enn disse. Linux er virkelig en plattformkodescene, så du ser OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha og mange andre standarder binærfiler er samlet for å jobbe med. Mer enn sannsynlig vil du ikke kunne kjøre noen av disse, selv om ARM er en ekstremt populær nettbrett- og smarttelefonplattform. Det er også plattformen som Raspberry Pi er basert rundt, noe som betyr at hvis du faktisk kjører Ubuntu på en mobil enhet eller Ubuntu MATE-distribusjonen for Raspberry Pi, trenger du faktisk disse i stedet for Intel 32-bit eller x86_64 binærfiler.

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