3

Это уже опубликовано в serverfault - и может быть более подходящим там. Немного переработан из оригинальной публикации.

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

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

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

-bash: ./flume: Нет такого файла или каталога

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

Если поместить в /usr /local /bin, то 'which flume' возвращает: /usr /local /bin /flume

Файл помечен как исполняемый (сделал 'chmod +x flume'), и lsattr не показывает проблем с битами атрибутов.

Я еще не смог попробовать «ldd flume». Я также не пробовал 'strace flume'. В настоящее время у меня сбой в работе кондиционера. [Это была такая неделя!]

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

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

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

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

3 ответа3

3

[скопировано из ответа Жиля о сбое сервера ]

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

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

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

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

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

1

У меня была похожая проблема с EXE-файлами на Ubuntu 12.04 64-bit.

Решением для меня было установить LSB в целевой системе:

sudo apt-get install lsb

Программы, не работающие внезапно, теперь работали. Немного об использовании

strings EXE-NOT-WORKING | head -1

предоставил ключ. Загрузчик LSB, идентифицированный в EXE-NOT-WORKING, был на оборот выше, чем по умолчанию, показанный для других работающих файлов EXE.

1

У меня было нечто подобное, в конце концов это было связано с тем, что libstdc++5 был удален из Ubuntu 10.04 и 9.10. Я не знаю, почему ошибка, которую я получил, не может найти libstdc++, но когда я установил ее (из нестабильной версии Debian), ошибка исчезла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .