Оказывается (как я подозревал), что вы пытались запустить 32-разрядный исполняемый файл в 64-разрядной системе. 64-разрядное ядро Linux способно запускать 32-разрядные исполняемые файлы (поэтому вы не получаете «ошибку формата exec»), но ему нужен отдельный набор (32-разрядных) библиотек: 64-разрядная версия libudev.so.0
бесполезна для 32-разрядной программы. (См. ld.so manpage для получения подробной информации о разрешении зависимостей в общей библиотеке).
Современные дистрибутивы на базе Debian поддерживают одновременную установку библиотеки для нескольких архитектур. apt-get install libudev0:i386
должен получить 32-битную версию библиотеки и все ее зависимости (их может быть много, если вы впервые используете 32-битное приложение). Если вы обновились с древней установки, вам может понадобиться добавить i386
для архитектур, поддерживаемых dpkg
, например:
dpkg --add-architecture i386
Некоторые советы, чтобы использовать, если программа нуждается в некоторых других библиотек, а также:
- Используйте ldd, чтобы просмотреть все зависимости сразу (и чего не хватает)
- Установите apt-file и запустите
apt-file update
, чтобы вы могли искать имя пакета по имени файла, даже если пакет в настоящее время не установлен (например: apt-file search /libudev.so.0
)
Был также старый Debian способ получения 32-разрядных библиотек на 64-битной системе: ia32-libs
пакет в amd64 хранилищах при условии, набор библиотек, концептуально «все ваше приложение может понадобиться». Не используйте этот подход, если вы не используете сжатие Debian или ранее (или дистрибутив того же возраста на основе debian). Даже когда это сработало, не было никакой гарантии, что программе не нужна другая библиотека. Ia32-libs
был полезен, когда поддержка многократного использования еще не была готова, и это было несколько лет назад.
Является ваш 'ех' 32-бит или 64-бит? Попробуйте 'файл my.exe'. Если это 32-разрядный исполняемый файл, ожидается, что для него не будет использована 64-битная библиотека (тогда вам нужно настроить систему «multiarch» и установить «libudev0: i386» со всеми ее зависимостями) –
file my.exe дает: ELF 32-разрядный исполняемый файл LSB, Intel 80386, версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU/Linux 2.6.24, BuildID [sha1] = 0xe561272b6fba244041101a89deb43b9cdf17fe3a, не разделенный, его 32-разрядный exe, Я установлю то, что вы сказали, и попробуйте. – Raulp
Да, вот и все. Если ваша система еще не «многоархиво» (вы знаете это, когда пакет 'libudev0: i386' не найден), вам может понадобиться его настроить. Это делается с помощью 'dpkg -add-architecture i386' на debian (тогда' apt-get update'), но в Ubuntu это может быть другим. –