2011-04-28 12 views
18

Opcja -l mówi łącznikowi, aby przeszukiwał biblioteki w standardowych katalogach. Z -L, możemy określić własne katalogi biblioteki do wyszukiwania.Czy kolejność opcji -l i -L w łączu GNU ma znaczenie?

Pytanie: Czy kolejność kolejności ma znaczenie również dla opcji -L, tak jak w przypadku łącznika -l w.r.t?

Ten link: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html nie mówi wiele o sekwencji -L.

EDIT Również

katalogi podane w linii poleceń są przeszukiwane przed domyślnie katalogów

jest ze strony człowieka (jak wskazano przez Dmitry), to robi oznacza, że ​​nawet jeśli podam takie polecenie, jak:

gcc -lm hello.c -Lx 

nadal katalog określony przez -L będzie miał pierwszeństwo?

+0

'nadal biblioteka określony z -l' ...: -L _nie_ nazwy biblioteki (określa katalogi wyszukiwania) – sehe

+0

@sehe dzięki, to była literówka (obecnie I” edytowane), nie otrzymałem jeszcze odpowiedzi na moje drugie pytanie. –

+0

możliwy duplikat [Dlaczego kolejność opcji "-l" w gcc ma znaczenie?] (Http://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc -matter) – patrickvacek

Odpowiedz

14

Tak, kolejność opcji -L ma znaczenie - podobnie jak opcje -l i -I.

Od man ld

-Lsearchdir
--library-path = searchdir

Dodaj searchdir ścieżki do listy ścieżek, które ld będą szukać bibliotek archiwalnych i skryptów kontrolnych ld . Możesz użyć tej opcji dowolną liczbę razy. Katalogi są przeszukiwane w kolejności, w jakiej zostały określone w wierszu poleceń. Katalogi określone w wierszu poleceń są przeszukiwane przed domyślnymi katalogami. Wszystkie opcje -L dotyczą wszystkich opcji -l, bez względu na kolejność wyświetlania opcji.

GCC documentations a dokładniej Linking Options będzie przydatna dla Ciebie

Edit
Niestety, rzeczywiście brakowało mi do sprawdzenia linku masz podane. "man ld" można po prostu napisać w konsoli.

Edit2
Zrobiłem prosty test oddanie -l przed -L opcje i to widać żadnej różnicy w porównaniu do -L przed -l

Więc odpowiadając na drugie pytanie, to

gcc -lm hello.c -Lx 

jest równa ten

gcc -Lx -lm hello.c 

libm jest wyszukiwane najpierw w katalogu x/w obu testach.

Pamiętaj jednak, że wstawianie -l<lib> przed plikami źródłowymi jest złą praktyką, która może prowadzić do niezdefiniowanych odniesień podczas łączenia. Jest to poprawny sposób

gcc hello.c -Lx -lm 
+0

Dzięki, muszę to gdzieś udokumentować, nie mogę go znaleźć, jeśli masz link, który to potwierdza, będę wdzięczny. –

+1

@Anisha Sure, zobacz moją aktualizację –

+0

Wdzięczny Tobie: hattip: Przed pytaniem tutaj przeszukałem Google'a słowami kluczowymi "man ld" i drugim linkiem, który otrzymałem: http://linux.die.net/man/ 8/ld-linux, wolę strony _die.net_ wrt man, ale tym razem pomyliłem "ld-linux" dla "ld". Dzięki za wskazanie. –

Powiązane problemy