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).