Questa è una citazione dal libro di programmazione Linux:come forzare il linker ad usare la libreria condivisa invece della libreria statica?
% gcc -o app app.o -L. –ltest
Supponiamo che sia libtest.a
e libtest.so
sono available.Then il linker deve scegliere una delle librerie e non il contrario . Il linker cerca ogni directory (prima quelle specificate con le opzioni -L
e poi quelle nelle directory standard). Quando il linker trova un di rectory che contiene libtest.a
o libtest.so
, il linker interrompe le directory di ricerca . Se solo una delle due varianti è presente nella directory, il linker sceglie tale variante. In caso contrario, il linker sceglie la versione della libreria condivisa, a meno che non sia stato specificato esplicitamente in . È possibile utilizzare l'opzione -static
per richiedere gli archivi statici . Ad esempio, la seguente riga utilizzerà l'archivio libtest.a
, anche se il libtest.so
libreria condivisa è disponibile anche:
% gcc -static -o app app.o -L. –ltest
Poiché se il linker incontra la directory che contiene libtest.a
si ferma di ricerca e gli usi quella libreria statica, come forzare il linker a cercare solo la libreria condivisa e non a statica?
% gcc -o app app.o -L. libtest.so
?
Nota: questo uso di '-l' non è documentato. Includerà il percorso completo della libreria nell'eseguibile, il che significa che la libreria non può mai essere spostata dalla sua posizione corrente. –
L'opzione @KevinPanko '-l' è documentata in' man ld', https: //linux.die.net/man/1/ld - Non posso testarlo facilmente ma secondo il doc: Se namespec è nella forma ': filename',' ld' cercherà il percorso della libreria per un file chiamato 'filename'. Come ho già detto, le versioni precedenti di 'ld' non supportano questa opzione. –
Stavo controllando la documentazione di 'gcc' qui: [Opzioni per il collegamento] (https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html) –