Я загрузил игру (Shank), но файл bin не запускается. Ошибка, которая появляется при попытке запуска исполняемого файла:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Вероятно, вы пытаетесь запустить 32-битный двоичный код в 64-битной системе, у которой нет 32-разрядной поддержки.
Есть три случая, когда вы можете получить сообщение " Нет такого файла или каталога ":
Файл не существует. Я предполагаю, что вы проверили, что файл существует (возможно, потому, что оболочка завершает его). Существует файл с этим именем, но это болтливая символическая ссылка. Файл существует, и вы даже можете его прочитать (например, команда file shank-linux-120720110-1-bin отображает что-то вроде «ELF 32-bit LSB executable ...»), и все же, когда вы пытаетесь выполнить его, вам сообщается, что файл doesn ' t существует.Сообщение об ошибке в этом последнем случае, по общему признанию, запутывает. Это говорит о том, что ключевой компонент среды выполнения, необходимый для запуска программы, отсутствует. К сожалению, канал, через который сообщается об ошибке, имеет место только для кода ошибки, а не для этой дополнительной информации, что это действительно среда выполнения, которая виновата. Если вы хотите получить техническую версию этого объяснения, прочитайте сообщение «Не найдено» при запуске 32-разрядного двоичного файла в 64-разрядной системе.
Команда file сообщит вам, что это за двоичный код является. За некоторыми исключениями вы можете запускать только двоичный код для архитектуры процессора, для которого предназначен выпуск Ubuntu. Основное исключение состоит в том, что вы можете запускать 32-разрядные (x86, aka IA32) двоичные файлы в 64-разрядных (amd64, aka x86_64) системах.
В Ubuntu до 11.04 для запуска 32-разрядного двоичного кода на 64-битной установке вам необходимо установить пакет ia32-libs Получение сообщения «Не найдено» при запуске 32-разрядного двоичного файла в 64-разрядной системе . Возможно, вам потребуется установить дополнительные библиотеки (вы получите явное сообщение об ошибке, если вы это сделаете).
Начиная с 11.10 (oneiric), введенного поддержки многократного использования, вы все равно можете установить ia32-libs, но вы можете выбрать более тонкого подхода, достаточно, чтобы установил пакет ia32-libs (плюс любая другая необходимая библиотека).
Выполняйте этот ответ только в том случае, если на выходе 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
Чтобы расширить ответ на @Gilles, существует по крайней мере три сценария, приводящих к этой ошибке:
Файл не существует. Файл существует, но является висячей символической ссылкой. Файл существует (например, команда file работает), что вызывает недоумение. Это может означать, что проблема связана с загрузчиком.Категории проблем загрузчика:
Файл не существует. Проблемы с загрузчиком скрипта (см. этот ответ). Файл существует, но является висячей символической ссылкой.Не удалось загрузить загрузчик из-за несоответствия 32/64 бит или по какой-либо другой причине. Могут быть и другие ошибки загрузчика, о которых я не знаю.
Установив deb для 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 ...
Не знаю, существует ли систематический способ определение правильных библиотек для установки. Существует немного догадок, отображающих сообщения об ошибках в имена пакетов (помощь по завершению табуляции).
Вероятно, вы пытаетесь запустить 32-битный двоичный код в 64-битной системе, у которой нет 32-разрядной поддержки.
Есть три случая, когда вы можете получить сообщение " Нет такого файла или каталога ":
Файл не существует. Я предполагаю, что вы проверили, что файл существует (возможно, потому, что оболочка завершает его). Существует файл с этим именем, но это болтливая символическая ссылка. Файл существует, и вы даже можете его прочитать (например, команда file shank-linux-120720110-1-bin отображает что-то вроде «ELF 32-bit LSB executable ...»), и все же, когда вы пытаетесь выполнить его, вам сообщается, что файл doesn ' t существует.Сообщение об ошибке в этом последнем случае, по общему признанию, запутывает. Это говорит о том, что ключевой компонент среды выполнения, необходимый для запуска программы, отсутствует. К сожалению, канал, через который сообщается об ошибке, имеет место только для кода ошибки, а не для этой дополнительной информации, что это действительно среда выполнения, которая виновата. Если вы хотите получить техническую версию этого объяснения, прочитайте сообщение «Не найдено» при запуске 32-разрядного двоичного файла в 64-разрядной системе.
Команда file сообщит вам, что это за двоичный код является. За некоторыми исключениями вы можете запускать только двоичный код для архитектуры процессора, для которого предназначен выпуск Ubuntu. Основное исключение состоит в том, что вы можете запускать 32-разрядные (x86, aka IA32) двоичные файлы в 64-разрядных (amd64, aka x86_64) системах.
В Ubuntu до 11.04 для запуска 32-разрядного двоичного кода на 64-битной установке вам необходимо установить пакет ia32-libs Получение сообщения «Не найдено» при запуске 32-разрядного двоичного файла в 64-разрядной системе . Возможно, вам потребуется установить дополнительные библиотеки (вы получите явное сообщение об ошибке, если вы это сделаете).
Начиная с 11.10 (oneiric), введенного поддержки многократного использования, вы все равно можете установить ia32-libs, но вы можете выбрать более тонкого подхода, достаточно, чтобы установил пакет ia32-libs (плюс любая другая необходимая библиотека).
Выполняйте этот ответ только в том случае, если на выходе 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
Чтобы расширить ответ на @Gilles, существует по крайней мере три сценария, приводящих к этой ошибке:
Файл не существует. Файл существует, но является висячей символической ссылкой. Файл существует (например, команда file работает), что вызывает недоумение. Это может означать, что проблема связана с загрузчиком.Категории проблем загрузчика:
Файл не существует. Проблемы с загрузчиком скрипта (см. этот ответ). Файл существует, но является висячей символической ссылкой.Не удалось загрузить загрузчик из-за несоответствия 32/64 бит или по какой-либо другой причине. Могут быть и другие ошибки загрузчика, о которых я не знаю.
Установив deb для 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 ...
Не знаю, существует ли систематический способ определение правильных библиотек для установки. Существует немного догадок, отображающих сообщения об ошибках в имена пакетов (помощь по завершению табуляции).