Как сделать ссылку на общую библиотеку из общей библиотеки с относительным путем? - PullRequest
21 голосов
/ 18 октября 2010

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

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

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

Ответы [ 3 ]

26 голосов
/ 26 октября 2010

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

Пример:

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

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

0 голосов
/ 01 декабря 2010

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

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

0 голосов
/ 18 октября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...