2011-01-07 1 views
12

Lo so -Wl,-shared è un'opzione di ld. Ho visto qualche persona compilare come questo,Differenza tra -shared e -Wl, -shared delle opzioni GCC

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o 

E qualche persona come questo

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o 

Quindi, voglio sapere se c'è qualche differenza tra -shared e -Wl,-shared.

Grazie.

risposta

11

Ci è una differenza tra passa -shared a GCC o -shared per ld (via -Wl). Il passaggio da -shared a GCC può abilitare o disabilitare altri flag al momento del collegamento. In particolare, potrebbero essere coinvolti diversi file crt*.

Per ottenere ulteriori informazioni, grep per -shared nella directory gcc/config/ di GCC e nelle sottodirectory.

Edit: Per dare un esempio specifico: il i386 FreeBSD, gcc -shared collegherà in file oggetto crtendS.o, mentre senza di -shared, si collegherà in crtend.o invece. Pertanto, -shared e -Wl,-shared non sono equivalenti.

+1

Nel trunk svn corrente di gcc, ho trovato i seguenti commenti alla riga 85 in gcc/config/i386/linux.h. "Fornisci un LINK_SPEC appropriato per Linux: qui forniamo il supporto per le opzioni GCC speciali, statiche e condivise, che ci consentono di collegare le cose in una di queste tre modalità applicando le opportune combinazioni di opzioni al momento del collegamento." –

+0

Ciao, FX, potresti fornire una spiegazione più concreta? Grazie. –

0

Non penso ci sia alcuna differenza. -shared non è un'opzione supportata di gcc e viene passata al linker se lo si specifica con -Wl o meno. L'opzione -Wl di gcc viene utilizzata per specificare che un elenco di opzioni separate da virgole deve essere passato al linker per un'ulteriore elaborazione.

+0

C'è un diff. Nel mio caso, il progetto non verrà compilato con -Wl. –