ПодФХС, системные пакеты (например, RPM) устанавливают библиотеки в /usr/lib
(или /usr/lib64
). Аналогично, библиотеки, скомпилированные с использованием старой configure;make;make install
процедуры " ", которые не являются частью дистрибутива системы, по умолчанию устанавливаются в /usr/local/lib
(или /usr/local/lib64
).
В целом считается дурным тоном требовать от пользователей изменять LD_LIBRARY_PATH или ld.so.conf
для приложений, которые они устанавливают. См. например:
http://web.archive.org/web/20060719201954/http://www.visi.com/~barr/ldpath.html
Однако разве не должно /usr/local/lib
быть исключения из этого правила?
Если это так, почему многие/большинство дистрибутивов не включают /usr/local/lib
в себя путь поиска библиотек по умолчанию? Пока что только ArchLinux, похоже, посчитал это ошибкой, см.http://bugs.archlinux.org/task/20059?project=1&opened=2263
и связанные с нимиhttp://bbs.archlinux.org/viewtopic.php?id=99807
Правильнее ли для приложения, которому нужна библиотека, /usr/local/lib
включить /usr/local/lib
ее в RPATH или ожидать, что ОС уже имеет эту настройку? Мне не нравится идея использования чего-либо, не основанного на $ORIGIN, в RPATH.
Это не вопрос педантичности, поскольку он влияет на стабильность системы и то, как должно быть упаковано программное обеспечение.
решение1
Было высказано предположение, что /usr/local/lib должен быть указан в пути по умолчанию, и это следует считать «ошибкой» в таких вариантах Linux, как Red Hat, где это не так.
Этот ответhttps://stackoverflow.com/a/17653893 указывает на существенные частиhttp://linuxmafia.com/faq/Admin/ld-lib-path.html
Многие дистрибутивы, производные от Red Hat, обычно не включают /usr/local/lib в файл /etc/ld.so.conf. Я считаю это ошибкой, и добавление /usr/local/lib в /etc/ld.so.conf является обычным ``исправлением'', необходимым для запуска многих программ в системах, производных от Red Hat.
Я поднял этот вопрос в Red Hat и теперь не согласен.
Пакеты, предоставляемые Red Hat, никогда не устанавливаются в /usr/local, в системах, где поставщики устанавливают в /usr/local, ответ другой. В таких системах можно обоснованно ожидать, что /usr/local/lib будет в пути поиска по умолчанию.
Red Hat указала, что /usr/local/lib не должен быть в пути поиска по умолчанию, поскольку любая добавленная туда библиотека может быть подхвачена RPM и yum.
Я исследовал это дальше. Если вы устанавливаете собственную версию системной библиотеки в /usr/local/lib, то она может удовлетворить зависимость другого системного пакета, который вы обычно устанавливаете через RPM или yum. Очевидно, что это может повлиять на стабильность системы. Хуже того, это может произойти довольно незаметно. Проверка yum может сообщить, что у вас есть все версии поставщиков всех необходимых вам пакетов, и не заметить, что у вас есть собственная версия чего-то важного в /usr/local/lib.
В системах, использующих другой менеджер пакетов, это может не применяться.
У меня нет полного ответа на вопрос, что именно нужно поместить в RPATH. Однако я считаю, что вам следует избегать зависимости от библиотек в /usr/local/lib и вместо этого устанавливать их в /opt (т. е. где-то, что вы контролируете как часть своей установки), где это практично.