scuso perché per il momento non ho l'ambiente di sperimentare e risolvere le seguenti domande me stesso:Domande su GCC linker
1) Diciamo che ho quattro file di libreria: libmylib_super.a
e libmylib_super.so
, mylib_dumb.a
e mylib_dumb.so
. Mentre specificando librerie per collegare, quali sono le differenze tra i seguenti approcci:
A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D) -lmylib_dumb
2) Definizione di -static
dalla pagina man :
Sui sistemi che supportano il collegamento dinamico , questo impedisce il collegamento con h le librerie condivise. Su altri sistemi , questa opzione non ha alcun effetto.
Questa opzione di linker ha qualcosa a che fare con la domanda n. 1? O ... per caso interferiranno l'uno con l'altro?
Grazie.
--- --- a cura 2009-12-28
Ho appena ricevuto il mio ambiente e sperimentare un po ', collegando per amplificare il DATE_TIME biblioteca. Supponiamo di avere tre file di libreria: libboost_date_time-mt-d.a
, libboost_date_time-mt-d.so.1.41.0
, libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0
(collegamento simbolico).
A.1) -l:libboost_date_time-mt-d.a
==> collegamento OK, binario funziona anche senza il file di libreria.
A.2) -l:libboost_date_time-mt-d.a
con -static
==>collega errore/usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d
==> che collega OK, opere binari ma richiede il file di libreria condivisa.
C.2) -lboost_date_time-mt-d
con -static
==>collega errore/usr/bin/ld: cannot find -lm
Qualsiasi idea sull'errore in A.2 e C.2?
Inoltre, durante l'esecuzione del programma in C.1, sembra cercare il file della libreria condivisa con il nome libboost_date_time-mt-d.so.1.41.0
ma non lo libboost_date_time-mt-d.so
. Non sarebbe scomodo se il programma è in esecuzione su un sistema senza la versione esatta della libreria? Quale potrebbe essere il modo pratico per gestire la versione durante l'utilizzo della libreria condivisa?
Correzione: quando viene specificato '-static', verrà cercato solo' .a' , non '.so' – iamamac
oops si grazie! –
Puoi trovare m informazioni sulle varie opzioni disponibili su questo sito: http://gcc.gnu.org/onlinedocs/gcc/ –