Was ist der Unterschied zwischen -rpath und -L?

88

gccund ldbieten viele Möglichkeiten, einen Suchpfad für Bibliotheken anzugeben, darunter die Flags -rpathund -L. Die Manpages zeigen keine Unterschiede zwischen diesen beiden Flags, was effektiv bedeutet, dass jedes Flag dem Bibliothekssuchpfad eine Bibliothek hinzufügt. Es scheint jedoch seltsam, dass beide Flaggen genau dasselbe tun. Was sind die Unterschiede zwischen diesen beiden Optionen, wenn überhaupt?

Craig M. Brandenburg
quelle
2
Vielleicht denkst du daran -rpath-link?
Ams

Antworten:

103

Sie müssen einige veraltete Kopien der Manpages lesen (Hervorhebung hinzugefügt):

-rpath = dir Fügt dem Suchpfad
      der Laufzeitbibliothek ein Verzeichnis hinzu . Dies wird verwendet,
      wenn eine ausführbare ELF-Datei mit freigegebenen Objekten verknüpft wird. Alle -rpath-
      Argumente werden verkettet und an den Laufzeit- Linker übergeben, der sie
      verwendet, um gemeinsam genutzte Objekte zur Laufzeit zu finden.

vs.

-L searchdir
--library-path = searchdir
      Fügen Sie path searchdir zur Liste der Pfade hinzu, die ld nach
      Archivbibliotheken und ld-Steuerungsskripten durchsucht .

Gibt an, wo nach Bibliotheken gesucht werden soll, -Lmit lddenen beim Verknüpfen verknüpft werden soll. Sie verwenden dies (zum Beispiel), wenn Sie Bibliotheken in Ihrem Build-Baum erstellen, die von in die normalen Systembibliothekspfade von eingefügt werden make install. --rpathAuf der anderen Seite wird dieser Pfad in der ausführbaren Datei gespeichert, sodass der dynamische Laufzeitlinker die Bibliotheken finden kann. Sie verwenden dies, wenn sich Ihre Bibliotheken außerhalb des Suchpfads der Systembibliothek befinden.

derobert
quelle
15
Anmerkungen: 1. Die meiste Zeit, wenn man braucht -rpath=/some/weird/path, braucht man -L /some/weird/pathauch. 2. Mit gcceinem braucht man Gebrauch -Wl,-rpath=dir.
n. 'Pronomen' m.
4
Ich verstehe immer noch nicht, warum beide benötigt werden. Ich habe die gleiche Erfahrung wie nm oben. Welche Informationen werden zur Erstellungszeit aus der Bibliothek benötigt? Abgesehen von möglichen h-Dateien, natürlich. Aber das ist eine andere Sache, denke ich ...
Fredrik Johansson
1
@FredrikJohansson Das wäre ein vernünftiges Thema für eine neue Frage (vorausgesetzt, sie wurde natürlich noch nicht gestellt). Zumindest die verfügbaren Symbole werden benötigt, aber es gibt wahrscheinlich noch andere Dinge.
Derobert
4
Folgefrage hinzugefügt unter: stackoverflow.com/questions/28096133/…
Fredrik Johansson