Почему исполняемый файл сказал бы, что не существует, когда я пытаюсь выполнить его?

У меня есть скомпилированная программа, теггер для идентификации частей текста, который утверждает, что не существует.

Когда я пытаюсь выполнить его через командную строку, я получаю это:

user@place:/home/user/explicitRedactedPath$ ls tagger
tagger
user@place:/home/user/explicitRedactedPath$ ./tagger arg and other args
-bash: ./tagger: No such file or directory

Этот исполняемый файл должен назвать сгенерированный сценарий, который является, как я столкнулся с этой проблемой. Каковы причины, которые могла разоблачить эта ошибка? Я вне идей о том, как зафиксировать его.

Примечания:

  • ОС является Ubuntu
  • Исполняемый файл был скопирован с другой машины
  • Файл действительно имеет полномочия выполнения (он дает надлежащее не - позволенный сообщение без них),
  • Я попытался копировать файл в другое местоположение (та же проблема)
  • Я попытался заменить файл новой копией (та же проблема)
  • Файл действительно существует. Открытие его с pico показывает файл с двоичными данными.
6
задан 28.09.2010, 23:11

4 ответа

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

Перекомпиляция его на целевой машине решила проблему.

7
ответ дан 07.12.2019, 15:40

Вероятно, теггер является гибкой ссылкой, и цель ссылки не там. Воспроизведите как это:

$ cp /usr/bin/ld .
$ ln -s ld fff
$ rm ld
$ ./fff
zsh: no such file or directory: ./fff
1
ответ дан 07.12.2019, 15:40

Можно пропускать совместно использованные библиотеки.

Сделайте 'ldd теггер' для наблюдения списка необходимых библиотек.

% ldd /bin/zsh                                                                                   
libcap.so.2 => /lib/libcap.so.2 (0x00007f50ce8db000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f50ce6d7000)
libm.so.6 => /lib/libm.so.6 (0x00007f50ce201000)
libc.so.6 => /lib/libc.so.6 (0x00007f50cdea0000)
libattr.so.1 => /lib/libattr.so.1 (0x00007f50cdc9b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f50ceaf8000)

Если один из них будет отсутствовать, то он не будет иметь пути рядом с ним.

0
ответ дан 07.12.2019, 15:40

Если Вы не можете перекомпилировать, Вы могли бы рассмотреть использование statifier для отображения динамического исполняемого файла в статически связанный. Отметьте, я лично не попробовал его.

0
ответ дан 07.12.2019, 15:40

Теги

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