C ++ динамически связанная библиотека не найдена в исполняемом файле

у меня есть .so в пути /home/test/lib/libTest.so и исполняемый файл под названием myexec который построен с RPATH указывая на /home/test/lib/, Тем не менее, когда я сделал ldd на myexecэто говорит libTest.so не нашел и мне пришлось делать export LD_LIBRARY_PATH для того, чтобы это работало.

Я подтвердил:

  1. libTest.so существует в /home/test/lib/
  2. objdump -x myexec | grep RUNPATH указывает ли /home/test/lib/ встроен в исполняемый файл.

Кто-нибудь имеет представление, почему он не может найти библиотеку без настройки LD_LIBRARY_PATH?

2

Решение

От Вот:

В Linux переменная среды LD_LIBRARY_PATH представляет собой набор каталогов, разделенный двоеточиями, в котором библиотеки следует искать в первую очередь, перед стандартным набором каталогов.

В качестве подсказки, вы должны быть осторожны, чтобы не заменить полностью свой LD_LIBRARY_PATH. Это может испортить путь для общих библиотек системы.
Всегда используйте export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/path,

РЕДАКТИРОВАТЬ 1:

Для rpath, удостоверься что libTest.so не зависит ни от какой другой библиотеки. В качестве альтернативы вы можете использовать -rpath-link опция в gcc вместо -rpath, как видно Вот:

-rpath-link DIR

При использовании ELF или SunOS для одной общей библиотеки может потребоваться другая. Это происходит, когда общая ссылка ld включает общую библиотеку в качестве одного из входных файлов. Когда компоновщик сталкивается с такой зависимостью при создании не разделяемой, не перемещаемой ссылки, он автоматически попытается найти требуемую общую библиотеку и включить ее в ссылку, если она не включена явно. В таком случае опция -rpath-link указывает первый набор каталогов для поиска.

РЕДАКТИРОВАТЬ 2:

Если вам нужна дополнительная помощь, пожалуйста, предоставьте:

  1. Точный параметр для rpath используется во время компиляции
  2. Выход для ldd /path/to/binary команда
  3. Выход для readelf -d /path/to/binary
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]