![Warum befindet sich /usr/local/lib nicht standardmäßig im Bibliothekspfad?](https://rvso.com/image/109240/Warum%20befindet%20sich%20%2Fusr%2Flocal%2Flib%20nicht%20standardm%C3%A4%C3%9Fig%20im%20Bibliothekspfad%3F%20.png)
Unter demFHS, Systempakete (z. B. RPMs) installieren Bibliotheken nach /usr/lib
(oder /usr/lib64
). Ebenso werden Bibliotheken, die mit der alten " configure;make;make install
"-Routine kompiliert wurden und nicht Teil der Systemverteilung sind, standardmäßig nach /usr/local/lib
(oder /usr/local/lib64
) installiert.
Im Allgemeinen gilt es als schlechter Stil, von Benutzern zu verlangen, LD_LIBRARY_PATH oder ld.so.conf
für von ihnen installierte Anwendungen zu ändern. Siehe zum Beispiel:
http://web.archive.org/web/20060719201954/http://www.visi.com/~barr/ldpath.html
Sollte es jedoch keine /usr/local/lib
Ausnahme von dieser Regel geben?
Wenn das der Fall ist, warum schließen viele/die meisten Distributionen es nicht /usr/local/lib
standardmäßig in den Bibliothekssuchpfad ein? Bisher scheint nur ArchLinux dies als Fehler angesehen zu haben, siehehttp://bugs.archlinux.org/task/20059?project=1&opened=2263
& die damit verbundenenhttp://bbs.archlinux.org/viewtopic.php?id=99807
Ist es richtiger, eine Anwendung, die eine Bibliothek benötigt, in ihren RPATH /usr/local/lib
aufzunehmen /usr/local/lib
, oder davon auszugehen, dass das Betriebssystem diese Einstellung bereits hat? Mir gefällt die Idee nicht, im RPATH etwas zu verwenden, das nicht auf $ORIGIN basiert.
Dies ist keine Frage der Pedanterie, da es Auswirkungen auf die Systemstabilität und die Art und Weise hat, wie Software verpackt werden sollte.
Antwort1
Es wurde vorgeschlagen, dass /usr/local/lib der Standardpfad sein sollte und dass dies in Linux-Varianten wie Red Hat, wo dies nicht der Fall ist, als „Fehler“ betrachtet werden sollte.
Diese Antworthttps://stackoverflow.com/a/17653893 weist auf die wesentlichen Teile vonhttp://linuxmafia.com/faq/Admin/ld-lib-path.html
Viele von Red Hat abgeleitete Distributionen enthalten /usr/local/lib normalerweise nicht in der Datei /etc/ld.so.conf. Ich halte das für einen Fehler und das Hinzufügen von /usr/local/lib zu /etc/ld.so.conf ist ein allgemeiner „Fix“, der zum Ausführen vieler Programme auf von Red Hat abgeleiteten Systemen erforderlich ist.
Ich habe dies bei Red Hat angesprochen und bin jetzt anderer Meinung.
Von Red Hat bereitgestellte Pakete werden nie in /usr/local installiert. Auf Systemen, auf denen Anbieter in /usr/local installieren, lautet die Antwort anders. Auf diesen Systemen kann man davon ausgehen, dass /usr/local/lib im Standardsuchpfad liegt.
Red Hat wies darauf hin, dass /usr/local/lib nicht im Standardsuchpfad enthalten sein sollte, da jede dort hinzugefügte Bibliothek von RPM und yum erkannt werden könnte.
Ich habe das weiter untersucht. Wenn Sie Ihre eigene Version einer Systembibliothek in /usr/local/lib installieren, könnte dies eine Abhängigkeit eines anderen Systempakets erfüllen, das Sie normalerweise über RPM oder Yum installieren. Dies könnte offensichtlich die Systemstabilität beeinträchtigen. Schlimmer noch, es würde dies ziemlich subtil tun. Yum Check könnte melden, dass Sie alle Herstellerversionen aller Pakete haben, die Sie benötigen, und nicht bemerken, dass Sie Ihre eigene Version von etwas Wichtigem in /usr/local/lib haben.
Auf Systemen, die einen anderen Paketmanager verwenden, gilt dies möglicherweise nicht.
Ich habe keine vollständige Antwort darauf, was Sie in Ihren RPATH einfügen sollen. Ich denke jedoch, Sie sollten die Abhängigkeit von Bibliotheken in /usr/local/lib vermeiden und sie stattdessen, wo immer möglich, in /opt installieren (also an einem Ort, den Sie als Teil Ihrer Installation steuern).