2010-10-27 3 views
2

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

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

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

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

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

ответ

2

В Linux запустите свою программу с помощью переменной окружения LD_LIBRARY_PATH, установленной в вашем файле sandbox.

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

+0

я как-то думал, что LD_LIBRARY_PATH использовался LDCONFIG. Я не знал, что вы можете просто изменить его динамически. Отлично работает. Благодаря! –

+0

Я проголосовал за этот ответ, моя ошибка: -p –

+0

'-Wl, -rpath,/path/to/sandbox' – Jed

1

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

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

+0

Этот способ, похоже, устанавливает RPATH в двоичном формате, что может быть хорошо для приложений с песочницей, но в целом делает невозможно перемещать приложение. –

+0

Песочные приложения - вот что находится здесь под вопросом. Что вы подразумеваете под «перемещением приложения»? Бинарное распределение? В этом случае LD_RUN_PATH не поможет. –