Ответ 1
Используйте ссылку rpath при связывании и укажите "специальный" путь $ORIGIN.
Пример:
-Wl,-R,'$ORIGIN/../lib'
Здесь сайт, который подробно описывает использование $ORIGIN: http://www.itee.uq.edu.au/~daniel/using_origin/
Я работаю над плагином Firefox, который использует внешние библиотеки для рендеринга 3D-графики в браузере.
Проблема в том, что я хочу, чтобы плагин использовал внешние библиотеки, упакованные с ним, без изменения LD_LIBRARY_PATH
.
Библиотеки устанавливаются в положении относительно плагина (тоже разделяемая библиотека), в то время как фактический исполняемый файл (т.е. Браузер) может быть расположен где-то совсем в другом месте.
Я тестирую его в Ubuntu (без проблем в версии плагина для Windows). Мои зависимости - библиотеки OpenSceneGraph, и статическая компиляция сделает плагин действительно большим (не вариант, если есть другой).
Используйте ссылку rpath при связывании и укажите "специальный" путь $ORIGIN.
Пример:
-Wl,-R,'$ORIGIN/../lib'
Здесь сайт, который подробно описывает использование $ORIGIN: http://www.itee.uq.edu.au/~daniel/using_origin/
Возможно, вы можете использовать флаг -L
во время компиляции, чтобы указать относительный путь, в котором компоновщик может найти ваши общие объекты.
Если вы уже создали свой lib, вы можете напрямую связать команду ld
.
Советы:. Вы можете легко проверить, определены ли некоторые символы в lib с помощью команды unix nm
. Это полезный способ проверить, что соединение хорошо сделано.
(Если бы я был вами, я бы просто изменил timealy LD_LIBRARY_PATH
, как вы сказали в своем посте. Почему бы вам не сделать это?)
Неправильно использовать относительный rpath для обеспечения безопасности,
Вы должны использовать функции libdl (dlopen и т.д.)