Я завантажив гру (Shank), але файл bin не працює. Помилка, яка з’являється при спробі запуску виконуваного файлу, є:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Я завантажив гру (Shank), але файл bin не працює. Помилка, яка з’являється при спробі запуску виконуваного файлу, є:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Відповіді:
Ви, ймовірно, намагаєтеся запустити 32-розрядний бінарний файл у 64-бітній системі, на якій не встановлена 32-бітна підтримка.
Є три випадки, коли ви можете отримати повідомлення "Немає такого файлу чи каталогу":
file shank-linux-120720110-1-bin
відображає щось на кшталт "ELF 32-бітний виконуваний LSB ..."), але при спробі його виконання вам сказали, що файл не існує.Повідомлення про помилку в цьому останньому випадку, очевидно, заплутане. Це вам говорить, що ключовий компонент середовища виконання, необхідний для запуску програми, відсутній. На жаль, на каналі, через який повідомляється про помилку, є лише місце для коду помилки, а не для цієї додаткової інформації, що справді це середовище виконання. Якщо ви хочете отримати технічну версію цього пояснення, прочитайте повідомлення "Не знайдено" під час запуску 32-розрядного двійкового файлу в 64-бітній системі .
file
Команда покаже вам тільки те , що це двійковий файл. За кількома винятками, ви можете запускати лише двійковий файл для архітектури процесора, для якого призначений ваш випуск Ubuntu. Основним винятком є те, що ви можете запускати 32-бітні (x86, він же IA32) бінарні файли в 64-бітних (amd64, aka x86_64) системах.
В Ubuntu до 11.04 для запуску 32-розрядного бінарного файлу на 64-бітній установці потрібно встановити ia32-libs
пакет . Можливо, вам доведеться встановити додаткові бібліотеки (якщо ви отримаєте явне повідомлення про помилку).
Оскільки 11.10 (oneiric) запровадив підтримку мультиарха , ви все ще можете встановити ia32-libs
, але ви можете обрати більш тонкий підхід, достатньо отримати (плюс будь-яку іншу необхідну бібліотеку).libc6-i386
ldd
перевірити, чи не вистачає вам бібліотеки. ldd kgio_ext.so
можна сказати щось подібне libruby.so.2.3 => not found
серед інших
bash: ...some...path...: No such file or directory
може з’явитися: після переміщення виконуваного файлу. Bash, схоже, кешує шляхи до виконуваних файлів, знайдених у $ PATH; біжи, hash -r
щоб очистити це. Дивіться: unix.stackexchange.com/a/5610/11352
Дотримуйтесь цієї відповіді лише в тому випадку, якщо результат file file-name
показує,
file-name: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
Для того, щоб запустити 32 - бітний виконуваний файл в 64 бітному мульти-арочної системи Ubuntu, ви повинні додати i386
архітектуру , а також ви повинні встановити libc6:i386
, libncurses5:i386
, libstdc++6:i386
ці три бібліотеки пакетів.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
libselinux1:i386
Встановивши деб для 32 біта, я зрозумів, що мені не вистачає деяких бібліотек (крім ia32-libs та libc6). Я вперше вирішив цю проблему, давши цю команду:
sudo apt-get install -f
Тоді я отримав ще одну помилку:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Очевидно, ці бібліотеки були встановлені належним чином. Не вдаючись у подробиці, мені довелося зв’язати бібліотеки вручну. Тоді я зрозумів, що також можна простіше вирішити через Synaptic встановити наступні пакети:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
Після цього наступною проблемою став чорний екран під час відтворення, який я вирішив, замінивши виконуваний файл у / Shank / bin цим: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .
Я сподіваюся, що комусь буде корисно. Якщо вам потрібна додаткова допомога або більше деталей, будь ласка, не соромтеся зв’язатися зі мною.
Ось стенограма, яка демонструє трохи більше про природу проблеми та про те, як її виправити в Ubuntu 16.04. Зауважте, що навіть незважаючи на те, що file
звіти "динамічно пов'язані", вони ldd
"не є динамічним виконуваним".
$ ./myprogram
bash: myprogram: No such file or directory
$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped
$ ldd myprogram
not a dynamic executable
Щойно ви встановите libc6: i386, все почне покращуватися ...
$ sudo apt-get install libc6:i386 # the initial fix
...
$ ldd myprogram
linux-gate.so.1 => (0xf77fd000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
/lib/ld-linux.so.2 (0x56578000)
$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Щоб виконати роботу, можливо, вам доведеться визначити та встановити додаткові бібліотеки по одній ...
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
Я не знаю, чи існує систематичний спосіб визначення правильних бібліотек для встановлення. Існує трохи здогадів, які відображають повідомлення про помилки з іменами пакунків (доповнення вкладки допомагає).
ldd
(неправильно) повідомляє "не динамічний виконуваний файл".
Щоб розширити відповідь на @Gilles, існує щонайменше три сценарії, що призводять до цієї помилки:
file
працює команда), створюючи дивовижне повідомлення про помилку. Це може означати, що проблема з завантажувачем.Категорії проблем із завантажувачем:
Завантажувач виконуваного файлу не існує. Ви можете перевірити це за допомогою команди файлів і побачити, чи існує завантажувач. Напр
file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
Повідомте interpreter /lib64/ld-lsb-x86-64.so.3
; якщо цього файлу не існує, вам потрібно встановити його. На цей конкретний навантажувач 16.04 відповідь виявилася sudo apt-get install lsb
.
Проблеми з завантажувачем сценарію (див. Цю відповідь ).
ldd <file-name>
для перевірки наявності будь-яких "не знайдених" бібліотек. Дивіться цю відповідь для отримання додаткової інформації.Навантажувач, який не існує, може бути наслідком невідповідності 32/64 біт або іншої причини. Можуть бути й інші помилки завантажувача, про які я не знаю.
file lmutil
не показав перекладача, але ldd
зробив, і встановлення lsb
вирішило проблему.