Průvodci

Jak opravit „nelze spustit binární soubor: chyba formátu Exec“ na Ubuntu

I když by se to nemělo stát při používání oficiálních repozitářů apt-get, pokud si stáhnete software z internetu a spustíte jej, existuje šance, že uvidíte obávané bash: ./nameOfProgram: nelze spustit binární soubor: Chyba formátu Exec. Tato chyba, za kterou obvykle následuje bash: ./nameOfProgram.sh: Oprávnění odepřeno nebo něco podobného označuje, že Ubuntu nemohl správně komunikovat s binárním souborem, který jste stáhli. Je to proto, že i když je to zřejmě platný binární soubor Linuxu, je navržen pro jinou čipovou sadu, než vaše jádro aktuálně podporuje.

Většina lidí používajících Ubuntu používá 32bitové nebo 64bitové procesory založené na standardní architektuře, kterou společnost Intel vydala, bez ohledu na to, kdo vlastně jejich mikročipy vyrobil. Je důležité si uvědomit, že 64bitové procesory mohou běžet v 32bitovém režimu, takže pokud se vám tato chyba zobrazuje, přestože máte 64bitový procesor, je pravděpodobné, že používáte 32bitovou verzi Ubuntu. Stačí několik jednoduchých příkazů, abyste zjistili, jak váš čip pracuje.

Metoda 1: Použití příkazu arch

Pokud nejste obeznámeni s typem mikroprocesoru, který jste nainstalovali do svého počítače, budete nejprve chtít použít příkaz arch z příkazového řádku. Po spuštění tohoto příkazu se vám zobrazí pouze jeden řádek výstupu. V mnoha případech uvidíte i686, což znamená, že používáte 32bitový procesor, a proto nemůžete spouštět binární soubory x86_64. Pokud místo toho uvidíte amd64 nebo něco podobného, ​​používáte procesor x86_64 a alespoň teoreticky byste měli být schopni provozovat většinu 32bitových a 64bitových binárních souborů. Na rozdíl od Microsoft Windows, Ubuntu Linux ve skutečnosti obsahuje správné nástroje, které v mnoha případech umožňují uživatelům 644bitových čipsetů spouštět 16bitové programy Windows ve svém operačním systému.

Tyto podmínky jsou stále pravdivé, i když ve skutečnosti nepoužíváte konkrétní model mikročipu. Například i686 je způsob, jakým Linux označuje mnoho 32bitových procesorů, i když ve skutečnosti nejde o čipy Intel 80686. I když používáte 64bitovou technologii Intel, Arch může i nadále nazývat váš procesor čipem amd64. To neznamená chybu a lze ji bezpečně ignorovat. Můžete použít kat / proc / cpuinfo nebo více / proc / cpuinfo zjistit přesný typ procesoru, který používáte. Protože řádky v tomto souboru jsou dlouhé, možná budete chtít před vydáním stisknout klávesu F11, pokud používáte grafické okno terminálu. Uživatelé virtuální konzoly, zejména ti, kteří pracují se serverem Ubuntu, se nebudou muset tolik starat.

Můžete vidět některé další typy výstupu, které mohou dále omezit vaše možnosti, pokud jde o spuštění softwaru. Ubuntu nejdéle podporoval architekturu PowerPC, kterou najdete na některých pracovních stanicích i na mnoha počítačích Classic Macintosh a starších počítačích Mac OS Mac OS X. Ve skutečnosti stále můžete najít úložiště Ubuntu pro tyto architektury, i když dnes dostávají malou podporu. Je však více než pravděpodobné, že v tomto případě nebudete moci spustit mnoho binárních souborů pro Linux, které si stáhnete z Internetu mimo oficiální úložiště. To neznamená, že Ubuntu na těchto počítačích nefunguje, i když se možná budete chtít podívat na lehčí distribuci Lubuntu.

Metoda 2: Použití příkazu Soubor

Příkaz file určuje, co různé soubory obsahují, a je obvykle velmi přesný. Zkuste identifikovat daný soubor zadáním souboru nameOfProgram zjistit, zda jako výstup získáte 32bitový nebo 64bitový ELF. Pokud vám řekne, že je to 64bitový binární soubor ELF a vy jste dostali i686 jako výstup z příkazu arch, pak neexistuje způsob, jak jej rozumně spustit na svém počítači. Pokud používáte 64bitový mikroprocesor s 32bitovým systémem Ubuntu, můžete technicky přeinstalovat operační systém, i když jde o extrémní krok ke spuštění jediného programu.

Existuje také velmi reálná možnost, jakkoli malá, že místo toho můžete narazit na binární soubor, který při pokusu o spuštění chrlí nevyžádané znaky do terminálu, i když na něm spustíte skenování malwaru. Tyto znaky mají obvykle podobu bloků ve tvaru kosočtverce nebo alternativně obdélníkových kostek, které mají číselné hodnoty. Někteří vědci nazývají tofu tofu a představují hodnoty Unicode znaků, které aktuálně nainstalovaná písma nebudou schopna zobrazit. Pokud je terminál takto zobrazuje, můžete si být jisti, že se nejedná ani o chybu písma, ani o nic společného s malwarem. Spíše je to prostě proto, že kompilovaný mikroprocesorový operační kód uvnitř binárního souboru je vašemu systému tak cizí, že neví, jak interpretovat část kódu.

Nejlepším způsobem, jak to opravit, je instalace správného balíčku pro vaši architekturu. Pokud instalujete balíčky z prostředí Ubuntu, pak vás systém apt-get nebo grafický správce Synaptic bez problémů pokryjí. Pokud stahujete balíčky z jiné distribuce, budete muset najít ten správný pro svou architekturu. Vezměme si například seznam balíčku gvim v Arch Linuxu. Zatímco výchozí balíček obsahuje architekturu x86_64, existuje také jeden pro čipovou sadu i686. Tenhle bude fungovat na 32bitových počítačích, které pracují se strukturou přerušení Intel, ale pamatujte, že výrazy i686 a 32bitové se po celou dobu vzájemně nevylučují, protože ostatní čipové sady, které Linux podporuje, skutečně obsahují své vlastní 32bitové implementace.

Uživatelé zkoumající celou scénu GNU / Linux mohou narazit na binární soubory sestavené pro mnohem exotičtější technologie než tyto. Linux je skutečně multiplatformní kódová scéna, takže uvidíte, jak jsou kompilovány OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha a mnoho dalších standardních binárních souborů. Je více než pravděpodobné, že žádný z nich nebudete moci provozovat, ačkoli ARM je velmi populární platforma pro tablety a smartphony. Je to také platforma, na které je Raspberry Pi založen, což znamená, že pokud skutečně používáte Ubuntu na mobilním zařízení nebo distribuci Ubuntu MATE pro Raspberry Pi, budete je skutečně potřebovat místo binárních souborů Intel 32-bit nebo x86_64.