Obvykle tato chybová zpráva znamená, že Linux nerozpozná soubor jako skript shellu nebo jako spustitelný soubor.
Příčinou je obvykle spuštění spustitelného souboru na nesprávné architektuře – pokud se pokusíte spustit spustitelné soubory x86 na CPU ARM, objeví se tato zpráva.
Udělal /usr/bin/id
přepsat, možná?
Zkuste jej spustit pomocí ./executablefilename namísto použití sh executablefilename. Koneckonců to není shell skript.
Problémem je spuštění binárního souboru pro jinou architekturu procesoru. Ke kontrole architektury binárních souborů můžete použít objdump (z binutils). Ke kontrole architektury počítače můžete použít uname.
např. Na tuto chybu „nelze spustit binární soubor“ jsem narazil při instalaci FF.Communicator – pluginu firefox pro Chrome (takže mohu spouštět stránky, které používají java applety).
- objdump ukazuje, že binární soubor je 64bitový elf64-x86-64
-
uname ukazuje, že můj počítač je 32bitový i686
$ ./FF.Communicatorbash:./FF.Communicator:nelze spustit binární soubor$ uname -mpioi686 i686 i386 GNU/Linux$ objdump -a ./FF.Communicator./FF.Communicator:formát souboru elf64-x86-64./ FF.Communicator
-
objdump na pracovním binárním souboru na mém počítači je 32bitový elf32-i386
$ objdump -a /bin/ls/bin/ls:formát souboru elf32-i386
Pomocí těchto nástrojů můžete zkontrolovat architektury strojů a binárních souborů – nejen architektury Intel, ale jakéhokoli procesoru.
Uživatelé Mac OSX mohou zjistit informace o architektuře konkrétního souboru pomocí příkazu "file":
$ file filename_here