У меня есть скомпилированная программа, теггер для идентификации частей текста, который утверждает, что не существует.
Когда я пытаюсь выполнить его через командную строку, я получаю это:
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
Этот исполняемый файл должен назвать сгенерированный сценарий, который является, как я столкнулся с этой проблемой. Каковы причины, которые могла разоблачить эта ошибка? Я вне идей о том, как зафиксировать его.
Примечания:
Программа была скомпилирована для несовместимой архитектуры, приводящей к неисполняемой программе. Сообщение об ошибке, указывающее ", не существует" вместо "недопустимого исполняемого файла", просто очень вводящее в заблуждение сообщение.
Перекомпиляция его на целевой машине решила проблему.
Можно пропускать совместно использованные библиотеки.
Сделайте '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)
Если один из них будет отсутствовать, то он не будет иметь пути рядом с ним.
Если Вы не можете перекомпилировать, Вы могли бы рассмотреть использование statifier для отображения динамического исполняемого файла в статически связанный. Отметьте, я лично не попробовал его.