2011-04-28 17 views
18

L'opzione -l indica al linker di cercare le librerie nelle directory standard. E con -L, possiamo specificare le nostre directory di libreria per la ricerca.L'ordine delle opzioni -l e -L nel linker GNU è importante?

Domanda: La sequenza dell'ordine ha importanza anche per l'opzione -L, come fa per il -l w.r.t il linker?

Questo collegamento: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html non dice molto sulla sequenza di -L.

EDIT Inoltre,

directory specificate sulla riga di comando vengono cercati prima del default directory

è dalla pagina man (come sottolineato da Dmitry), fa questo significa che anche se si specifica l'ordine come:

gcc -lm hello.c -Lx 

ancora la directory specificata con -L verrà data prima la preferenza?

+0

'ancora la libreria specificata con -l' ...: -L _non_ specificare una libreria (specifica directory di ricerca) – sehe

+0

@sehe grazie, che è stato un errore di battitura (ora io' ve edited), non ho ancora ricevuto una risposta alla mia seconda domanda. –

+0

possibile duplicato di [Perché l'ordine di '-l' opzione in gcc è importante?] (Http://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc -mater) – patrickvacek

risposta

14

Sì, l'ordine delle opzioni -L è importante, come le opzioni -l e -I.

Da man ld

-Lsearchdir
--library-path = searchdir

Aggiungi percorso searchdir alla lista di percorsi che ld cercherà per le biblioteche d'archivio e gli script di controllo ld . Puoi usare questa opzione un numero qualsiasi di volte. Le directory vengono cercate nell'ordine in cui sono specificate sulla riga di comando. Le directory specificate nella riga di comando vengono ricercate prima delle directory predefinite. Tutte le opzioni -L si applicano a tutte le opzioni -l, indipendentemente dall'ordine in cui appaiono le opzioni.

GCC documentations e più specificamente Linking Options sarà utile per voi

Modifica
dispiace, anzi ho perso per controllare il link che hai dato. "man ld" può essere scritto nella console.

Edit2
ho fatto un semplice test mettendo -l prima -L opzioni e si vede alcuna differenza confrontando a -L prima -l

Quindi rispondere alla tua seconda domanda, questo

gcc -lm hello.c -Lx 

è pari a questo

gcc -Lx -lm hello.c 

la libm viene cercata prima nella directory x/in entrambi i test.

Nota che mettere uno -l<lib> prima dei file di origine è una cattiva pratica, che può portare a riferimenti non definiti durante il collegamento. Questo è il modo corretto

gcc hello.c -Lx -lm 
+0

Grazie, che deve essere documentato da qualche parte, non riesco a trovarlo, se hai un link che conferma la cosa, te ne sarò grato. –

+1

@Anisha Certo, guarda il mio aggiornamento –

+0

Grato a te: hattip: ho cercato su Google prima di chiedere qui, con le parole chiave 'man ld' e il secondo link che ho ottenuto era: http://linux.die.net/man/ 8/ld-linux, preferisco le pagine man di _die.net_ wrt, ma questa volta ho scambiato 'ld-linux' per 'ld'. Grazie per la segnalazione. –