Подтвердить что ты не робот

Как сделать ссылку на общую библиотеку из общей библиотеки с относительным путем?

Я работаю над плагином Firefox, который использует внешние библиотеки для рендеринга 3D-графики в браузере.

Проблема в том, что я хочу, чтобы плагин использовал внешние библиотеки, упакованные с ним, без изменения LD_LIBRARY_PATH.
Библиотеки устанавливаются в положении относительно плагина (тоже разделяемая библиотека), в то время как фактический исполняемый файл (т.е. Браузер) может быть расположен где-то совсем в другом месте.

Я тестирую его в Ubuntu (без проблем в версии плагина для Windows). Мои зависимости - библиотеки OpenSceneGraph, и статическая компиляция сделает плагин действительно большим (не вариант, если есть другой).

4b9b3361

Ответ 1

Используйте ссылку rpath при связывании и укажите "специальный" путь $ORIGIN.

Пример:

-Wl,-R,'$ORIGIN/../lib'

Здесь сайт, который подробно описывает использование $ORIGIN: http://www.itee.uq.edu.au/~daniel/using_origin/

Ответ 2

Возможно, вы можете использовать флаг -L во время компиляции, чтобы указать относительный путь, в котором компоновщик может найти ваши общие объекты.

Если вы уже создали свой lib, вы можете напрямую связать команду ld.

Советы:. Вы можете легко проверить, определены ли некоторые символы в lib с помощью команды unix nm. Это полезный способ проверить, что соединение хорошо сделано.

(Если бы я был вами, я бы просто изменил timealy LD_LIBRARY_PATH, как вы сказали в своем посте. Почему бы вам не сделать это?)

Ответ 3

Неправильно использовать относительный rpath для обеспечения безопасности,

Вы должны использовать функции libdl (dlopen и т.д.)