Sprievodcovia

Ako opraviť „nie je možné spustiť binárny súbor: chyba formátu Exec“ v systéme Ubuntu

Aj keď by sa to pri používaní oficiálnych úložísk apt-get nemalo stať, ak si stiahnete softvér z internetu a spustíte ho, existuje šanca, že uvidíte obávaný bash: ./nameOfProgram: nemôže spustiť binárny súbor: chyba formátu Exec. Po tejto chybe, za ktorou obvykle nasleduje bash: ./nameOfProgram.sh: Povolenie odmietnuté alebo niečo podobné, naznačuje, že Ubuntu nebol schopný správne spolupracovať s binárnym súborom, ktorý ste stiahli. Je to preto, že hoci je to zjavne platný binárny systém Linux, je navrhnutý pre inú čipovú sadu, ako momentálne podporuje vaše jadro.

Väčšina ľudí používajúcich Ubuntu používa 32-bitové alebo 64-bitové procesory založené na štandardnej architektúre, ktorú vydala spoločnosť Intel, bez ohľadu na to, kto ich mikročipy skutočne vytvoril. Je dôležité mať na pamäti, že 64-bitové procesory môžu bežať v 32-bitovom režime, takže ak sa vám zobrazuje táto chyba, aj keď máte 64-bitový procesor, je pravdepodobné, že používate 32-bitovú verziu Ubuntu. Stačí niekoľko jednoduchých príkazov a zistíte, ako váš čip pracuje.

Metóda 1: Použitie príkazu arch

Ak nie ste oboznámení s typom mikroprocesora, ktorý ste nainštalovali na svoje zariadenie, najskôr budete chcieť použiť príkaz arch z príkazového riadku. Po vykonaní tohto príkazu sa vám vráti iba jeden riadok výstupu. V mnohých prípadoch sa zobrazí i686, čo znamená, že používate 32-bitový procesor, a preto nemôžete spustiť binárne súbory x86_64. Ak namiesto toho uvidíte amd64 alebo niečo podobné, pracujete na procesore x86_64 a aspoň teoreticky by ste mali byť schopní spustiť väčšinu 32-bitových a 64-bitových binárnych súborov. Na rozdiel od Microsoft Windows, Ubuntu Linux v skutočnosti obsahuje správne nástroje, ktoré umožňujú používateľom 644-bitových čipsetov spúšťať v ich operačných systémoch 16-bitové programy Windows aj v mnohých prípadoch.

Tieto výrazy stále platia, aj keď v skutočnosti nepoužívate konkrétny model mikročipu. Napríklad i686 označuje Linux ako mnoho 32-bitových procesorov, aj keď v skutočnosti nejde o čipy Intel 80686. Aj keď používate 64-bitovú technológiu Intel, arch by mohol váš procesor nazvať čipom amd64. To neznamená, že došlo k chybe, a dá sa bezpečne ignorovať. Môžete použiť kat / proc / cpuinfo alebo viac / proc / cpuinfo zistiť presný typ procesora, ktorý používate. Pretože riadky v tomto súbore sú dlhé, možno budete chcieť pred vydaním stlačiť kláves F11, ak používate grafické okno terminálu. Používatelia virtuálnej konzoly, najmä tí, ktorí pracujú so serverom Ubuntu, sa nebudú musieť toľko starať.

Môže sa zobraziť niekoľko ďalších typov výstupu, ktoré by mohli ďalej obmedziť vaše možnosti spustenia softvéru. Systém Ubuntu najdlhšie podporoval architektúru PowerPC, ktorú nájdeme na niektorých pracovných staniciach, ako aj na mnohých klasických počítačoch Macintosh a starších zariadeniach Mac OS X. V skutočnosti stále môžete nájsť úložiská Ubuntu pre tieto architektúry, aj keď dnes dostávajú malú podporu. Je však viac než pravdepodobné, že v tomto prípade nebudete môcť spustiť mnoho binárnych súborov s Linuxom, ktoré si stiahnete z internetu mimo oficiálnych úložísk. To neznamená, že Ubuntu na týchto strojoch nefunguje, aj keď by ste sa mali pozrieť na ľahšiu distribúciu Lubuntu.

Metóda 2: Použitie súboru Príkaz

Príkaz file identifikuje, čo obsahujú rôzne súbory, a je zvyčajne veľmi presný. Skúste daný súbor identifikovať zadaním súboru nameOfProgram aby ste zistili, či dostanete ako výstup 32-bitový alebo 64-bitový ELF. Ak vám povie, že ide o 64-bitový binárny súbor ELF, a vy ste dostali i686 ako výstup z príkazu arch, potom neexistuje spôsob, ako ho rozumne spustiť na svojom počítači. Ak používate 64-bitový mikroprocesor s 32-bitovým Ubuntu, môžete technicky preinštalovať operačný systém, čo je však trochu extrémny krok na spustenie jedného programu.

Existuje tiež veľmi reálna možnosť, akokoľvek ľahká, že by ste namiesto toho mohli naraziť na binárny súbor, ktorý pri pokuse o spustenie chrlí nevyžiadané znaky do terminálu, aj keď v ňom spustíte skenovanie malvéru. Tieto znaky majú zvyčajne formu blokov v tvare kosoštvorca alebo alternatívne obdĺžnikové kocky, ktoré majú číselné hodnoty. Niektorí počítačoví vedci nazývajú tofu tofu a predstavujú hodnoty znakov Unicode, ktoré vaše aktuálne nainštalované písma nebudú schopné zobraziť. Ak ich terminál zobrazuje takto, môžete si byť istí, že nejde o chybu písma, ani o nič spoločné s malvérom. Je to skôr preto, že skompilovaný operačný kód mikroprocesora vo vnútri binárneho kódu je vášmu systému taký cudzí, že nevie, ako interpretovať časť kódu.

Najlepším spôsobom, ako to napraviť, je inštalácia správneho balíka pre vašu architektúru. Ak inštalujete balíčky z prostredia Ubuntu, systém apt-get alebo grafický správca Synaptic vás bez problémov pokryjú. Ak sťahujete balíčky z inej distribúcie, budete musieť nájsť ten pravý pre svoju architektúru. Vezmime si napríklad zoznam balíka gvim v Arch Linuxe. Zatiaľ čo predvolený balík obsahuje architektúru x86_64, existuje aj jeden pre čipset i686. Ten bude fungovať na 32-bitových strojoch, ktoré pracujú s prerušovacou štruktúrou Intel, ale nezabudnite, že výrazy i686 a 32-bit sa navzájom neustále nevylučujú, pretože ostatné čipové sady, ktoré Linux podporuje, skutočne obsahujú svoje vlastné 32-bitové implementácie.

Používatelia, ktorí preskúmajú celú scénu GNU / Linux, sa môžu stretnúť s binárnymi súbormi zostavenými pre oveľa exotickejšie technológie ako sú tieto. Linux je skutočne scéna kódu naprieč platformami, takže uvidíte, že sú zostavené súbory OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha a mnoho ďalších štandardných binárnych súborov. Je viac než pravdepodobné, že nebudete môcť prevádzkovať žiadne z nich, hoci ARM je mimoriadne populárna platforma pre tablety a smartphony. Je to tiež platforma, na ktorej je Raspberry Pi založená, čo znamená, že ak skutočne používate Ubuntu na mobilnom zariadení alebo distribúciu Ubuntu MATE pre Raspberry Pi, budete ich skutočne potrebovať namiesto binárnych súborov Intel 32-bit alebo x86_64.

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