Как связать общие библиотеки в локальном каталоге, OSX против Linux - PullRequest
2 голосов
/ 27 октября 2010

У меня есть несколько общих / динамических библиотек, установленных в каталоге с песочницей. Я создаю несколько приложений, которые ссылаются на библиотеки. Я сталкиваюсь с тем, что, по-видимому, является разницей между OSX и Linux в этом отношении, и я не уверен, каково (лучшее) решение.

В OSX местоположение самой библиотеки записывается в библиотеку, поэтому, если ваши приложения ссылаются на нее, исполняемый файл знает, где искать библиотеку во время выполнения. Это работает, как и ожидалось с моей песочницей, потому что исполняемый файл выглядит там вместо общесистемных путей установки.

В Linux я не могу заставить это работать. По всей видимости, местоположение библиотеки отсутствует в самой библиотеке. Насколько я понимаю, вы должны добавить папки, содержащие библиотеки, в /etc/ld.so.conf и заново создать кэш ld, запустив ldconfig.

Мне кажется, это не помогает, потому что мои библиотеки расположены в домашнем каталоге пользователя. Похоже, что ldconfig это не нравится, что на самом деле имеет смысл.

Как я могу решить это? Я не хочу перемещать библиотеки из моей песочницы.

Ответы [ 2 ]

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

В Linux запустите вашу программу с переменной окружения LD_LIBRARY_PATH, установленной в каталог вашей песочницы.

(я помню, что использовал флаг -R для включения путей библиотеки в двоичный файл, но либо он был удален из gcc, либо он был доступен только в системах BSD.)

1 голос
/ 14 апреля 2011

В Linux вы должны установить LD_RUN_PATH в каталог вашей песочницы.Это лучше, чем установка LD_LIBRARY_PATH, потому что вы сообщаете компоновщику, где находится библиотека в время ссылки , а не сообщаете загрузчику общей библиотеки в время выполнения .

См .: http://xahlee.org/UnixResource_dir/_/ldpath.html

...