Где установить LD_LIBRARY_PATH на Solaris? - PullRequest
9 голосов
/ 03 марта 2009

Как лучше всего настроить специфичную для приложения переменную LD_LIBRARY_PATH в Solaris? Как работает

LD_LIBRARY_PATH

переменная работа?

В настоящее время мы настроили его на .kshrc, но разные приложения нуждаются в разных версиях среды обмена сообщениями, но эти приложения работают под одним и тем же использованием и, следовательно, им потребуются разные LD_LIBRARY_PATH, так что, по вашему мнению, какое место лучше установить эту переменную?

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

Ответы [ 7 ]

14 голосов
/ 03 марта 2009

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

6 голосов
/ 04 марта 2009

Формальное описание LD_LIBRARY_PATH можно найти на странице man для "ld.so.1", т.е. запустить "man ld.so.1". Он также описывает некоторые другие переменные, которые учитываются компоновщиком времени выполнения.

В дополнение к LD_LIBRARY_PATH исполняемые файлы и общие библиотеки также могут иметь встроенный путь поиска для библиотек. Если вы запускаете приложение, которое вы связали сами, вы можете использовать опцию ld -R, чтобы задать встроенный путь (и у Sun CC, и у gcc есть опции, которые делают одно и то же). Это может позволить вам избежать использования LD_LIBRARY_PATH во-первых.

2 голосов
/ 04 февраля 2014

Владр, Аланк прав.

Не рекомендуется устанавливать LD_LIBRARY_PATH в Solaris. На всех.

Если вам нужно запечь определенный путь к вашей библиотеке или исполняемому файлу, тогда вы должны использовать флаг -R для компоновщика. Если сборка с gcc, то используйте -Wl, Rpath (я думаю).

Если вам нужно сделать это для шага после сборки (например, потому что вам не хватает Исходный код для перекомпиляции), тогда elfedit (1) вам очень поможет. Это задокументировано в man-странице, а также в Руководстве по библиотекам Linker + на http://docs.oracle.com/cd/E26502_01/html/E26507/index.html

1 голос
/ 09 июня 2010

Ответ crle является наиболее правильным. На Solaris LD_LIBRARY_PATH не должен использоваться. Используйте вместо этого crle. Чтобы просмотреть текущие пути, просто запустите "crle" сам по себе. Чтобы обновить список, используйте crle -u -l /path/to/your/lib/directory. -u необходим для записи изменений в конфигурацию системы, в противном случае изменение будет временным. См. Справочную страницу для получения дополнительной информации.

0 голосов
/ 21 апреля 2013

Вы можете проверить файл .profile или .profile.user. Для него будет закомментированная запись. Не рекомендуется использовать, поскольку он не работает. Вам следует создавать двоичные файлы, передавая значения в флаги, а не используя переменная.

0 голосов
/ 17 сентября 2010

Только что обнаружил случай, когда глобальный LD_LIBRARY_PATH не вступает в силу, мне пришлось обернуть скрипт и установить LD_LIBRARY_PATH перед приложением. crle - хорошее глобальное решение, если вы установили много библиотек в / opt / csw / lib через pkgutil из blastwave.

0 голосов
/ 03 января 2010

Вы можете использовать команду crle:

crle -l / path / to / your / lib / file

...