una que librerias libreria instalar estatica ejecutar dinamica crear compilar como gcc linker static-libraries dynamic-linking

gcc - que - instalar librerias de c en linux



Diciendo directamente a gcc para vincular una biblioteca estáticamente (2)

Me -Wl,-Bstatic extraño usar -Wl,-Bstatic para decirle a gcc qué bibliotecas quiero vincular estáticamente. Después de todo, le digo a gcc directamente toda la demás información sobre el enlace con las bibliotecas ( -Ldir , -llibname ).

¿Es posible decirle al controlador gcc directamente qué bibliotecas deberían estar vinculadas estáticamente?

Aclaración: sé que si una determinada biblioteca existe solo en versiones estáticas, la usará sin -Wl,-Bstatic , pero quiero insinuar que gcc prefiere la biblioteca estática. También sé que la especificación directa del archivo de la biblioteca se vincularía con él, pero prefiero mantener la semántica para incluir bibliotecas estáticas y dinámicas de la misma manera.


Es posible, por supuesto, usar -l: lugar de -l . Por ejemplo -l:libXYZ.a para vincular con libXYZ.a . Observe la lib escrita, a diferencia de -lXYZ que expandiría automáticamente a libXYZ .


Puede agregar un archivo .a en el comando de enlace:

gcc yourfiles /path/to/library/libLIBRARY.a

Pero esto no está hablando con el controlador gcc, pero con ld linker como opciones como -Wl,anything es.

Cuando le diga a gcc o ld "-Ldir -lLIBRARY", el vinculador verificará las versiones estáticas y dinámicas de la biblioteca (puede ver un proceso con -Wl,--verbose ). Para cambiar el orden de los tipos de biblioteca -Wl,-Bstatic puede usar -Wl,-Bstatic y -Wl,-Bdynamic . Aquí hay una página man de gnu LD: http://linux.die.net/man/1/ld

Para vincular su programa con lib1, lib3 dinámicamente y lib2 estáticamente, use dicha llamada gcc:

gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3

suponiendo que la configuración predeterminada de ld es usar bibliotecas dinámicas (está en Linux).