2011-01-07 18 views
12

-Wl,-shared es una opción de ld. He visto a alguna persona compilar como este,Diferencia entre -shared y -Wl, -shared de las opciones de GCC

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

Y alguna persona como esta

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

Por lo tanto, me gustaría saber si hay alguna diferencia entre -shared y -Wl,-shared.

Gracias.

Respuesta

11

Hay es una diferencia entre pasar -shared a gcc o -shared a ld (a través de -Wl). Pasar -shared a GCC puede habilitar o deshabilitar otras banderas en el momento del enlace. En particular, pueden estar involucrados diferentes archivos crt*.

Para obtener más información, grep para -shared en el directorio y subdirectorios de GCC gcc/config/.

Editar: Para dar un ejemplo concreto: en i386 FreeBSD, gcc -shared unirá en el fichero objeto crtendS.o, mientras que sin -shared, se unirá en crtend.o lugar. Por lo tanto, -shared y -Wl,-shared no son equivalentes.

+1

En el tronco svn actual de gcc, encontré los siguientes comentarios en la línea 85 en gcc/config/i386/linux.h. "Proporcione un LINK_SPEC apropiado para Linux. Aquí brindamos soporte para las opciones especiales de GCC -static y -shared, que nos permiten vincular las cosas en uno de estos tres modos aplicando las combinaciones de opciones apropiadas en tiempo de enlace". –

+0

Hola, FX, ¿podrías dar una explicación más concreta? Gracias. –

0

No creo que haya ninguna diferencia. -shared no es una opción admitida de gcc y se pasa al vinculador si lo especifica con -Wl o no. La opción -Wl de gcc se usa para especificar que una lista de opciones separadas por comas se pase al enlazador para su posterior procesamiento.

+0

Hay una diferencia. En mi caso, el proyecto no se compilará con -Wl. –

Cuestiones relacionadas