Назад | Перейти на главную страницу

-bash: ./flume: такого файла или каталога нет, НО flume существует и работает в другом месте

У нас есть продукт, созданный на 32-разрядной ОС CentOS 4 Linux, который работает без изменений на 32- и 64-разрядных CentOS / RHEL 4 и 5 и SLES 10. Он также работает без изменений на 64-разрядной версии SLES 9. [32-разрядная версия SLES 9 требует другого libstdc ++.

Имя главного двоичного исполняемого файла: flume

Вчера мы попытались установить это на 64-битной Ubuntu 10, и, несмотря на то, что файл там и нужного размера, мы получили:

-bash: ./flume: No such file or directory

file flume показывает, что это 32-битный ELF (не могу вспомнить точный вывод, и система находится в изолированной сети)

Если положить в /usr/local/bin, затем:

which flume
/usr/local/bin/flume

Я не пробовал ldd flume все же.

Теперь я подозреваю, что какой-то библиотеки там нет.

Это совершенно бесполезное сообщение, которого я никогда раньше не видел.

Это свойственно Ubuntu или, возможно, только этой установке.

Мы сдались и перешли на систему RHEL 4, и все в порядке. Но я обязательно хотел бы знать, чем это вызвано.

Вы можете получить это сообщение, если поток существует, но его «загрузчик» не существует, где

  • загрузчиком собственного исполняемого файла является его динамический загрузчик, например /lib/ld-linux.so.2;
  • загрузчик скрипта - это программа, указанная в его строке shebang, например, /bin/sh если сценарий начинается с #!/bin/sh.

В вашем случае похоже, что у вас не установлен 32-битный динамический загрузчик в 64-битной системе Ubuntu. Это в libc6-i386 пакет.

strings ./flume | head -n 1 отобразит путь к динамическому загрузчику, который flume требует. Это один из тех редких случаев, когда strace ./flume совершенно бесполезен.

Я считаю эту ситуацию наиболее вводящим в заблуждение сообщением об ошибке Unix. К сожалению, исправить это будет сложно: ядро ​​может сообщить вызывающему программе только числовой код ошибки, поэтому в нем есть место только для «команда не найдена», а не для имени загрузчика, который оно ищет.

Вы пытались дать файлу права на выполнение?

chmod +x ./flume