У нас есть продукт, созданный на 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
;/bin/sh
если сценарий начинается с #!/bin/sh
.В вашем случае похоже, что у вас не установлен 32-битный динамический загрузчик в 64-битной системе Ubuntu. Это в libc6-i386
пакет.
strings ./flume | head -n 1
отобразит путь к динамическому загрузчику, который flume
требует. Это один из тех редких случаев, когда strace ./flume
совершенно бесполезен.
Я считаю эту ситуацию наиболее вводящим в заблуждение сообщением об ошибке Unix. К сожалению, исправить это будет сложно: ядро может сообщить вызывающему программе только числовой код ошибки, поэтому в нем есть место только для «команда не найдена», а не для имени загрузчика, который оно ищет.
Вы пытались дать файлу права на выполнение?
chmod +x ./flume