Jaka jest różnica między -rpath a -L?

89

gcci ldzapewniają wiele sposobów określania ścieżki wyszukiwania bibliotek - między innymi flagi -rpathi -L. Strony podręcznika nie ujawniają różnic między tymi dwiema flagami, co oznacza, że ​​każda flaga dodaje bibliotekę do ścieżki wyszukiwania biblioteki. Jednak wydaje się dziwne, że obie flagi robią dokładnie to samo. Jakie są różnice, jeśli w ogóle, między tymi dwoma opcjami?

Craig M. Brandenburg
źródło
2
Może myślisz o -rpath-link?
rano

Odpowiedzi:

106

Musisz czytać niektóre przestarzałe kopie stron podręcznika (podkreślenie dodane):

-rpath = dir
      Dodaje katalog do ścieżki wyszukiwania biblioteki wykonawczej . Jest to używane
      podczas łączenia pliku wykonywalnego ELF z obiektami współdzielonymi. Wszystkie
      argumenty -rpath są łączone i przekazywane do konsolidatora środowiska wykonawczego , który
      używa ich do lokalizowania obiektów współdzielonych w czasie wykonywania.

vs.

-L katalog_wyszukiwania
--library-path = searchdir
      Dodaje ścieżkę searchdir do listy ścieżek, które ld będzie szukał
      bibliotek archiwów i skryptów sterujących ld.

-LMówi więc, ldgdzie szukać bibliotek, z którymi ma się łączyć podczas łączenia. Używasz tego (na przykład), gdy tworzysz dla bibliotek w swoim drzewie kompilacji, które zostaną umieszczone w normalnych ścieżkach bibliotek systemowych przez make install. --rpathz drugiej strony przechowuje tę ścieżkę w pliku wykonywalnym, tak aby dynamiczny konsolidator środowiska wykonawczego mógł znaleźć biblioteki. Używa się tego, gdy biblioteki znajdują się poza ścieżką wyszukiwania bibliotek systemowych.

derobert
źródło
16
Uwagi: 1. W większości przypadków, kiedy ktoś tego potrzebuje -rpath=/some/weird/path, -L /some/weird/pathteż potrzebuje . 2. Przy gccjednej potrzebie użycia -Wl,-rpath=dir.
n. zaimki m.
4
Nadal nie rozumiem, dlaczego oba są potrzebne. Mam takie samo doświadczenie jak nm powyżej. Jakie informacje są potrzebne z biblioteki w czasie kompilacji? Oprócz możliwych plików h, przyczyny. Ale to chyba kolejna rzecz ...
Fredrik Johansson
1
@FredrikJohansson To byłby rozsądny temat na nowe pytanie (zakładając oczywiście, że nie zostało jeszcze zadane). Przynajmniej dostępne symbole są potrzebne, ale prawdopodobnie są inne rzeczy.
derobert
4
Dodano pytanie uzupełniające pod adresem: stackoverflow.com/questions/28096133/…
Fredrik Johansson