Я завантажив гру (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вирішило проблему.