Jak naprawić błąd „nie można wykonać pliku binarnego: błąd formatu Exec” w systemie Ubuntu



Wypróbuj Nasz Instrument Do Eliminowania Problemów

Chociaż nie powinno się to zdarzać podczas korzystania z oficjalnych repozytoriów apt-get, jeśli pobierzesz oprogramowanie z Internetu i uruchomisz je, istnieje szansa, że ​​zobaczysz przerażające bash: ./nameOfProgram: nie można wykonać pliku binarnego: błąd formatu Exec . Ten błąd, po którym zwykle następuje bash: ./nameOfProgram.sh: Odmowa dostępu lub coś podobnego oznacza, że ​​Ubuntu nie był w stanie poprawnie połączyć się z pobranym plikiem binarnym. Dzieje się tak, ponieważ chociaż najwyraźniej jest to prawidłowy plik binarny systemu Linux, został zaprojektowany dla innego chipsetu niż obecnie obsługiwane przez jądro.



Większość ludzi korzystających z Ubuntu korzysta z 32-bitowych lub 64-bitowych procesorów opartych na standardowej architekturze wydanej przez firmę Intel, niezależnie od tego, kto faktycznie wyprodukował ich mikrochipy. Należy pamiętać, że procesory 64-bitowe mogą działać w trybie 32-bitowym, więc jeśli pojawia się ten błąd, mimo że masz procesor 64-bitowy, prawdopodobnie używasz 32-bitowej wersji Ubuntu. Wystarczy kilka prostych poleceń, aby stwierdzić, jak działa Twój układ.



Metoda 1: użycie polecenia arch

Jeśli nie znasz typu mikroprocesora, który zainstalowałeś na swoim komputerze, najpierw będziesz chciał użyć polecenia arch z wiersza poleceń. Po uruchomieniu tego polecenia zobaczysz tylko jeden wiersz danych wyjściowych. W wielu przypadkach zobaczysz i686, co oznacza, że ​​korzystasz z procesora 32-bitowego i dlatego nie możesz uruchomić plików binarnych x86_64. Jeśli zamiast tego zobaczysz amd64 lub coś podobnego, oznacza to, że korzystasz z procesora x86_64 i przynajmniej teoretycznie powinieneś być w stanie uruchomić większość 32-bitowych i 64-bitowych plików binarnych. W przeciwieństwie do Microsoft Windows, Ubuntu Linux w rzeczywistości zawiera odpowiednie narzędzia, które pozwalają użytkownikom chipsetów 644-bitowych na uruchamianie 16-bitowych programów Windows w ich systemie operacyjnym w wielu przypadkach.



Te terminy są nadal aktualne, nawet jeśli w rzeczywistości nie używasz tego konkretnego modelu mikroczipa. Na przykład i686 jest tym, jak Linux odnosi się do wielu 32-bitowych procesorów, nawet jeśli w rzeczywistości nie są to chipy Intel 80686. Nawet jeśli używasz 64-bitowej technologii Intel, arch może nadal nazywać twój procesor chipem amd64. Nie oznacza to błędu i można je bezpiecznie zignorować. Możesz użyć cat / proc / cpuinfo albo więcej / proc / cpuinfo aby dowiedzieć się, jakiego dokładnie typu procesora używasz. Ponieważ linie w tym pliku są długie, możesz chcieć nacisnąć F11 przed jego wydaniem, jeśli używasz graficznego okna terminala. Użytkownicy konsoli wirtualnej, zwłaszcza ci, którzy pracują z serwerem Ubuntu, nie będą musieli się tak bardzo martwić.

Możesz zobaczyć inne typy danych wyjściowych, które mogą dodatkowo ograniczyć twoje opcje, jeśli chodzi o uruchamianie oprogramowania. Ubuntu najdłużej obsługiwał architekturę PowerPC, którą można znaleźć na niektórych stacjach roboczych, a także na wielu klasycznych komputerach Macintosh i starszych komputerach z systemem OS X Macintosh. W rzeczywistości nadal można znaleźć repozytoria Ubuntu dla tych architektur, chociaż obecnie otrzymują one niewielkie wsparcie. Jednak w tym przypadku najprawdopodobniej nie będziesz w stanie uruchomić wielu plików binarnych Linuksa pobranych z Internetu poza oficjalnymi repozytoriami. Nie oznacza to, że Ubuntu nie działa na tych maszynach, chociaż warto przyjrzeć się lżejszej dystrybucji Lubuntu.

Metoda 2: użycie polecenia pliku

Polecenie file identyfikuje zawartość różnych plików i zazwyczaj jest bardzo dokładne. Spróbuj zidentyfikować plik, którego dotyczy problem, wpisując plik nameOfProgram aby sprawdzić, czy na wyjściu otrzymujesz 32-bitowy lub 64-bitowy ELF. Jeśli powie Ci, że jest to 64-bitowy plik binarny ELF i otrzymałeś i686 jako wyjście polecenia arch, to nie ma sposobu, aby rozsądnie uruchomić go na swoim komputerze. Jeśli korzystasz z 64-bitowego mikroprocesora z 32-bitowym systemem Ubuntu, możesz technicznie ponownie zainstalować system operacyjny, chociaż jest to nieco ekstremalny krok w celu uruchomienia pojedynczego programu.



Istnieje również bardzo realna możliwość, choć niewielka, że ​​zamiast tego natrafisz na plik binarny, który przy próbie uruchomienia wyrzuca niepotrzebne znaki do terminala, nawet jeśli wykonałeś na nim skanowanie pod kątem złośliwego oprogramowania. Znaki te zwykle mają postać bloków w kształcie rombów lub prostokątnych sześcianów z wartościami liczbowymi. Niektórzy informatycy nazywają to drugie tofu i reprezentują wartości Unicode znaków, których aktualnie zainstalowane kroje pisma nie będą w stanie wyświetlić. Jeśli terminal wyświetla je w ten sposób, możesz być pewien, że nie jest to błąd czcionki ani nic wspólnego ze złośliwym oprogramowaniem. Dzieje się tak raczej dlatego, że skompilowany kod operacji mikroprocesora wewnątrz pliku binarnego jest tak obcy dla twojego systemu, że nie wie, jak zinterpretować część kodu.

Najlepszym sposobem rozwiązania tego problemu jest zainstalowanie odpowiedniego pakietu dla swojej architektury. Jeśli instalujesz pakiety z poziomu Ubuntu, system apt-get lub graficzny menedżer Synaptic zapewni Ci to bez żadnych problemów. Jeśli pobierasz pakiety z innej dystrybucji, musisz znaleźć odpowiedni dla swojej architektury. Weźmy na przykład listę pakietu gvim w Arch Linux. Chociaż domyślny pakiet zawiera architekturę x86_64, dostępny jest również pakiet dla chipsetu i686. Ten będzie działał na 32-bitowych maszynach, które działają ze strukturą przerwań Intela, ale pamiętaj, że terminy i686 i 32-bitowe nie są wzajemnie uwzględniane przez cały czas, ponieważ inne chipsety obsługiwane przez Linuksa faktycznie mają własne 32-bitowe implementacje.

Użytkownicy eksplorujący całą scenę GNU / Linuksa mogą natknąć się na pliki binarne skompilowane dla znacznie bardziej egzotycznych technologii niż te. Linux to prawdziwie wieloplatformowa scena kodu, więc zobaczysz, że OpenRISC, MIPS, SPARC, M32R, MN103, ARM, ARC, Alpha i wiele innych standardów binarnych jest kompilowanych do pracy. Najprawdopodobniej nie będziesz w stanie uruchomić żadnego z nich, chociaż ARM to niezwykle popularna platforma na tablety i smartfony. Jest to również platforma, na której opiera się Raspberry Pi, co oznacza, że ​​jeśli faktycznie używasz Ubuntu na urządzeniu mobilnym lub dystrybucji Ubuntu MATE dla Raspberry Pi, będziesz ich potrzebować zamiast 32-bitowych plików binarnych Intela lub x86_64.

4 minuty czytania