Получение & ldquo; нет такого файла или каталога & rdquo ;. Зачем? [dубликат]

Я загрузил игру (Shank), но файл bin не запускается. Ошибка, которая появляется при попытке запуска исполняемого файла:

bash: ./shank-linux-120720110-1-bin: No such file or directory
151
задан 8 May 2012 в 17:56

10 ответов

Вероятно, вы пытаетесь запустить 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 (плюс любая другая необходимая библиотека).

196
ответ дан 18 July 2018 в 12:49

64-битные системы Ubuntu Multiarch

Выполняйте этот ответ только в том случае, если на выходе 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
38
ответ дан 18 July 2018 в 12:49

Чтобы расширить ответ на @Gilles, существует по крайней мере три сценария, приводящих к этой ошибке:

Файл не существует. Файл существует, но является висячей символической ссылкой. Файл существует (например, команда file работает), что вызывает недоумение. Это может означать, что проблема связана с загрузчиком.

Категории проблем загрузчика:

Файл не существует. Проблемы с загрузчиком скрипта (см. этот ответ). Файл существует, но является висячей символической ссылкой.

Не удалось загрузить загрузчик из-за несоответствия 32/64 бит или по какой-либо другой причине. Могут быть и другие ошибки загрузчика, о которых я не знаю.

1
ответ дан 18 July 2018 в 12:49

Установив 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.

Надеюсь, кому-то это будет полезно. Если вам нужна дополнительная помощь или более подробная информация, пожалуйста, свяжитесь со мной.

4
ответ дан 18 July 2018 в 12:49

Ниже приведена расшифровка расшифровки, касающаяся характера проблемы, и как ее исправить как 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 ...

Не знаю, существует ли систематический способ определение правильных библиотек для установки. Существует немного догадок, отображающих сообщения об ошибках в имена пакетов (помощь по завершению табуляции).

3
ответ дан 18 July 2018 в 12:49

Вероятно, вы пытаетесь запустить 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 (плюс любая другая необходимая библиотека).

196
ответ дан 24 July 2018 в 20:02
  • 1
    Спасибо за отличный ответ, Жиль. Хотя я еще не испытал эту проблему (пока!), Я подал ваш ответ для дальнейшего использования. – Jim C 8 May 2012 в 02:56
  • 2
    Спасибо за ваш исчерпывающий ответ! Загруженный ящик для файлов был единственным, доступным в этом формате (bin). Поэтому я считаю, что это хорошо для всех архитектур. Я также загрузил файл .deb для своей архитектуры (64 бит), но с другой ошибкой. На данный момент я думаю, что на игру влияют некоторые ошибки, или я не могу установить эту игру. Теперь я пытаюсь загрузить libc6-i386, и я все еще пытаюсь установить его. Я напишу еще раз, если произойдут значительные изменения. Благодарю вас за время. – Francesco 8 May 2012 в 03:08
  • 3
    @Francesco Пожалуйста, разместите решение! Скорее всего, это поможет другим людям, пытающимся запустить Shank на Ubuntu. Хорошо ответить на ваш вопрос . – Gilles 9 May 2012 в 23:19
  • 4
    Вы можете использовать ldd для проверки отсутствия библиотеки. ldd kgio_ext.so может сказать что-то вроде libruby.so.2.3 => not found среди других – EnabrenTane 4 February 2016 в 02:45
  • 5
    По-видимому, существует еще один сценарий, когда bash: ...some...path...: No such file or directory может отображаться: после перемещения исполняемого файла. Кажется, что Bash кэширует пути к исполняемым файлам, найденным в $ PATH; запустите hash -r, чтобы очистить его. Смотрите: unix.stackexchange.com/a/5610/11352 – akavel 12 December 2016 в 15:25

64-битные системы Ubuntu Multiarch

Выполняйте этот ответ только в том случае, если на выходе 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
38
ответ дан 24 July 2018 в 20:02
  • 1
    Я бы использовал sudo для последней команды: запуск 32-битного двоичного файла (что явно не скомпилировано вами или Ubuntu), поскольку sudo может быть рискованным. (ну, даже как не root, допустимо) – alci 7 May 2014 в 21:58
  • 2
    что бы это ни было, но это работает. – Avinash Raj 7 May 2014 в 22:01
  • 3
    Следует отметить, что если вы используете CentOS или RedHat, этот ответ не применяется. Из-за этого было отброшено на несколько часов. – oMiKeY 1 March 2017 в 03:26
  • 4
    На Kali 2 64 бит мне пришлось установить libselinux1:i386 – Aralox 19 March 2017 в 14:57

Чтобы расширить ответ на @Gilles, существует по крайней мере три сценария, приводящих к этой ошибке:

Файл не существует. Файл существует, но является висячей символической ссылкой. Файл существует (например, команда file работает), что вызывает недоумение. Это может означать, что проблема связана с загрузчиком.

Категории проблем загрузчика:

Файл не существует. Проблемы с загрузчиком скрипта (см. этот ответ). Файл существует, но является висячей символической ссылкой.

Не удалось загрузить загрузчик из-за несоответствия 32/64 бит или по какой-либо другой причине. Могут быть и другие ошибки загрузчика, о которых я не знаю.

1
ответ дан 24 July 2018 в 20:02
  • 1
    В моем случае file lmutil не отобразил интерпретатор, но ldd сделал, и установка lsb решила проблему. – meowsqueak 25 June 2018 в 02:05

Установив 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.

Надеюсь, кому-то это будет полезно. Если вам нужна дополнительная помощь или более подробная информация, пожалуйста, свяжитесь со мной.

4
ответ дан 24 July 2018 в 20:02

Ниже приведена расшифровка расшифровки, касающаяся характера проблемы, и как ее исправить как 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 ...

Не знаю, существует ли систематический способ определение правильных библиотек для установки. Существует немного догадок, отображающих сообщения об ошибках в имена пакетов (помощь по завершению табуляции).

3
ответ дан 24 July 2018 в 20:02
  • 1
    ldd (неверно) сообщает «не динамический исполняемый файл». – nobar 9 June 2016 в 18:42

Другие вопросы по тегам:

Похожие вопросы: