Me resulta extraño usarlo -Wl,-Bstaticpara saber con gccqué bibliotecas quiero vincular estáticamente. Después de todo, estoy contando gccdirectamente toda otra información sobre el enlace con 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 ella -Wl,-Bstatic, pero quiero implicar gccque prefiero la biblioteca estática. También sé que especificar el archivo de la biblioteca directamente se vincularía con él, pero prefiero mantener la semántica para incluir las bibliotecas estáticas y dinámicas de la misma manera.
fuente

-l:documentada esta opción? ¿Qué versión de gcc necesito para usar?ldlinker sourceware.org/binutils/docs/ld/Options.html "-l namespec.. Si namespec tiene la forma: nombre de archivo, ld buscará en la ruta de la biblioteca un archivo llamado nombre de archivo, de lo contrario buscará en la biblioteca ruta de acceso para un archivo llamado libnamespec.a. .. en los sistemas ELF .., ld buscará en un directorio una biblioteca llamada libnamespec.so antes de buscar uno llamado libnamespec.a ... Tenga en cuenta que este comportamiento no se aplica a: filename , que siempre especifica un archivo llamado nombre de archivo ". Desde binutils 2.18 - sourceware.org/binutils/docs-2.18/ld/Options.htmlPuede agregar un archivo .a en el comando de enlace:
Pero esto no está hablando con el controlador gcc, sino con el
ldenlazador como opciones como-Wl,anythingson.Cuando le dice a gcc o ld
-Ldir -lLIBRARY, el enlazador 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 marcados, puede usar-Wl,-Bstaticy-Wl,-Bdynamic. Aquí hay una página de manual de gnu LD: http://linux.die.net/man/1/ldPara vincular su programa con lib1, lib3 dinámicamente y lib2 estáticamente, use dicha llamada gcc:
Suponiendo que la configuración predeterminada de ld es usar bibliotecas dinámicas (está en Linux).
fuente
gcc.gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3hace el truco.-ly-Lson opciones de enlace también.gcc yourfiles /path/to/library/libLIBRARY.ao-Wl,-Bstatic?/path/to/library/libLIBRARY.anecesita una ruta completa para escribirse, la variante 2-Wl,-Bstatic -llib2 -Wl,-Bdynamices larga y agrega 2 opciones adicionales y asume el modo predeterminado como Bdynamic, y la variante aceptada 3-l:libXYZ.aes corta y simplemente funciona. Los tres funcionarán para muchos casos, y la variante 2 puede no funcionar al vincular programas estáticos. El paso de vinculación real para la lib es el mismo en todas las variantes, según tengo entendido.