Pobrałem grę (Shank), ale plik bin nie działa. Błąd wyświetlany przy próbie uruchomienia pliku wykonywalnego to:
bash: ./shank-linux-120720110-1-bin: No such file or directory
64-bit
files
games
executable
Francesco
źródło
źródło
Odpowiedzi:
Prawdopodobnie próbujesz uruchomić 32-bitowy plik binarny w 64-bitowym systemie, który nie ma zainstalowanej obsługi 32-bitowej.
Istnieją trzy przypadki, w których można uzyskać komunikat „Brak takiego pliku lub katalogu”:
file shank-linux-120720110-1-bin
wyświetla coś w stylu „32-bitowy plik ELF 32-bitowy plik LSB…”), a jednak, gdy próbujesz go uruchomić, usłyszysz, że plik nie istnieje.Komunikat o błędzie w tym ostatnim przypadku jest wprawdzie mylący. Mówi ci to, że brakuje kluczowego elementu środowiska wykonawczego niezbędnego do uruchomienia programu. Niestety kanał, przez który zgłaszany jest błąd, ma miejsce tylko na kod błędu, a nie na te dodatkowe informacje, że tak naprawdę winne jest środowisko wykonawcze. Jeśli potrzebujesz wersji technicznej tego objaśnienia, przeczytaj komunikat „Nie znaleziono” podczas uruchamiania 32-bitowego pliku binarnego w 64-bitowym systemie .
file
Komenda powie, tylko co to jest binarny. Z kilkoma wyjątkami, możesz uruchomić plik binarny tylko dla architektury procesora, dla której jest twoja wersja Ubuntu. Głównym wyjątkiem jest to, że można uruchomić 32-bitowe (x86, aka IA32) pliki binarne na systemach 64-bitowych (amd64, aka x86_64).W systemie Ubuntu do 11.04, aby uruchomić 32-bitowy plik binarny w 64-bitowej instalacji, musisz zainstalować
ia32-libs
pakiet . Może być konieczne zainstalowanie dodatkowych bibliotek (jeśli to zrobisz, otrzymasz wyraźny komunikat o błędzie).Ponieważ 11.10 (oneiric) wprowadziło obsługę wielu ścieżek , możesz nadal instalować
ia32-libs
, ale możesz wybrać bardziej szczegółowe podejście, to wystarczy (oprócz każdej innej niezbędnej biblioteki).libc6-i386
źródło
ldd
aby sprawdzić, czy brakuje biblioteki.ldd kgio_ext.so
może powiedzieć coś takiegolibruby.so.2.3 => not found
między innymibash: ...some...path...: No such file or directory
może się pojawić: po przeniesieniu pliku wykonywalnego. Bash wydaje się buforować ścieżki do plików wykonywalnych znalezionych w $ PATH; biegnij,hash -r
aby to wyczyścić. Zobacz: unix.stackexchange.com/a/5610/1135264-bitowe systemy Ubuntu Multiarch
Postępuj zgodnie z tą odpowiedzią tylko wtedy, gdy wyniki
file file-name
programów,Aby uruchomić 32-bitowy plik wykonywalny w 64-bitowym systemie multi-arch Ubuntu, trzeba dodać
i386
architekturę, a także trzeba zainstalowaćlibc6:i386
,libncurses5:i386
,libstdc++6:i386
te trzy pakiety bibliotek.źródło
libselinux1:i386
Instalując deb dla wersji 32-bitowej zdałem sobie sprawę, że brakuje mi niektórych bibliotek (oprócz ia32-libs i libc6). Najpierw rozwiązałem ten problem, wydając następujące polecenie:
Potem dostałem kolejny błąd:
Oczywiście biblioteki te zostały poprawnie zainstalowane. Nie wchodząc w szczegóły musiałem ręcznie połączyć biblioteki. Uświadomiłem sobie, że dzięki Synaptic można również łatwiej zainstalować następujące pakiety:
Potem następnym problemem był czarny ekran podczas gry, który rozwiązałem, zastępując plik wykonywalny w / Shank / bin tym: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Mam nadzieję, że komuś się przyda. Jeśli potrzebujesz dodatkowej pomocy lub więcej informacji, skontaktuj się ze mną.
źródło
Oto transkrypcja pokazująca nieco więcej na temat natury problemu i sposobu jego rozwiązania w wersji Ubuntu 16.04. Zauważ, że mimo iż
file
raporty „dynamicznie połączone”,ldd
„nie są dynamicznymi plikami wykonywalnymi”.Po zainstalowaniu libc6: i386 wszystko zaczyna się poprawiać ...
Aby ukończyć zadanie, może być konieczne zidentyfikowanie i zainstalowanie dodatkowych bibliotek pojedynczo ...
Nie wiem, czy istnieje systematyczny sposób identyfikowania poprawnych bibliotek do zainstalowania. Trochę zgadywania polega na odwzorowaniu komunikatów o błędach na nazwy pakietów (pomaga uzupełnienie tabulacji).
źródło
ldd
(niepoprawnie) zgłasza „nie jest dynamicznym plikiem wykonywalnym”.Aby rozwinąć odpowiedź @Gilles, istnieją co najmniej trzy scenariusze powodujące ten błąd:
file
Polecenie działa), co powoduje, że pojawia się zagadkowy komunikat o błędzie. Może to oznaczać problem z modułem ładującym.Kategorie problemów z modułem ładującym:
Program ładujący plik wykonywalny nie istnieje. Możesz to sprawdzić za pomocą polecenia file i sprawdzić, czy moduł ładujący istnieje. Na przykład
Zawiadomienie
interpreter /lib64/ld-lsb-x86-64.so.3
; jeśli ten plik nie istnieje, musisz go zainstalować. Odpowiedź dla tego konkretnego modułu ładującego w dniu 16.04sudo apt-get install lsb
.Problemy z modułem ładującym skrypt (zobacz tę odpowiedź ).
ldd <file-name>
do sprawdzania, czy nie ma bibliotek „nie odnalezionych”. Zobacz tę odpowiedź, aby uzyskać więcej informacji.Moduł ładujący nie istnieje może być spowodowany niedopasowaniem 32/64 bit lub z innego powodu. Mogą istnieć inne rodzaje błędów modułu ładującego, o których nie wiem.
źródło
file lmutil
nie pokazałem tłumacza, aleldd
zrobiłem to i instalacjalsb
rozwiązała problem.