Запуск 32-разрядного exe на Ubuntu: libudev.so: невозможно открыть файл общих объектов: нет такого файла или каталога

Я пытаюсь запустить exe, который использует libudev.so, но он дает эту ошибку:

при загрузке разделяемых библиотек: libudev.so.0: невозможно открыть файл общих объектов: нет такого файла или каталога

Запуск uname -a дает:

3.5.0-44-generiС# 67 ~ exact1-Ubuntu SMP Wed Nov 13 16:16:57 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Я использую Ubuntu 12.04

Я проверил /lib /lib32 /lib64 там нет libudev но в диспетчере Synaptic я могу видеть libudev0 установленный (см. рисунок ниже)

libudev on Synaptic Manager и я мог найти его в /lib/x86_64-linux-gnu/libudev.so.0.

Что может быть неправильным?

Ответ 1

Получается (как я подозревал), что вы пытались запустить 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 был полезен, когда поддержка многократного использования еще не была готова, и это было несколько лет назад.

Ответ 3

Попробуйте создать символическую ссылку:

sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0