Почему /usr/local/lib не указан в пути к библиотекам по умолчанию?

Почему /usr/local/lib не указан в пути к библиотекам по умолчанию?

ПодФХС, системные пакеты (например, 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 (т. е. где-то, что вы контролируете как часть своей установки), где это практично.

Связанный контент