2010-12-28 20 views
11

¿cuál es la diferencia entre vincular gcc_s y gcc mediante LDFLAGS? ¿Es gcc_s una biblioteca estática y una biblioteca compartida de gcc?diferencia entre -lgcc_s y gcc

Porque estaba buscando una solución donde se menciona que se vincule con gcc, mientras que solo gcc_s funciona en mi caso. Deseo saber la verdadera diferencia.

< < símbolo oculto `__name_here' en /some/library/path.a(_filename.o) es referenciado por DSO

En este caso, el problema se resuelve normalmente mediante la adición o bien "gcc -l "o" gcc -print-libgcc-file-name "a los indicadores de vinculación (LDFLAGS). Sin embargo, a diferencia de mis otras plataformas regulares (i386, amd64, sparc64), aquí no fue suficiente. Después de un montón de golpes de cabeza (para ser justos, también viene de la música) me di cuenta de que este indicador es necesario tanto al vincular el libc el último archivo ejecutable. enlace: http://people.defora.org/~khorben/200903.html

+0

También hay 'libgcc_eh.a', que se usa cuando' -estático' se usa. http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a-custom-version-of-glibc-and-static-linking –

Respuesta

12

libgcc_s.so es una biblioteca compartida, libgcc.a es una biblioteca estática. No son equivalentes; puede ser necesario vincular ambos. libgcc_s contiene variables globales que no deben tener múltiples copias en un proceso; el código en libgcc es seguro para vincular varias veces.

+0

Hola, gracias, << puede ser necesario para unir ambos. ¿Cuándo surgirá esta necesidad? – kumar

+3

@kumar: algunos símbolos (por ejemplo, '__register_frame') están solo en libgcc_s, otros (por ejemplo,' __eprintf') están solo en libgcc. Use 'nm -D --defined-only libgcc_s.so' resp. 'nm --defined-only libgcc.a' para obtener listas completas para comparar. –

+1

¿Por qué necesitamos ambos? ¿Por qué no son lo mismo, solo una estática y la otra dinámica? –