c++ - compile - g++ linker: forzar el enlace estático si existe una biblioteca estática?
gcc (2)
Cuando solo desea vincular estáticamente una o dos bibliotecas con el resto, incluidas las bibliotecas del sistema, al ser dinámico, a menudo es más fácil simplemente hacer referencia a la biblioteca estática por su nombre completo. Es decir, en lugar de usar -l
y -L
para que g ++ resuelva una biblioteca de lo que encuentra, simpy agrega la ruta completa a la biblioteca como entrada. Tomando el comando g ++ anterior, para vincular un programa principal de la aplicación main.o
a libz y libfoo estáticos y libbar y libglib dinámicos, etc.
`` `g ++ main.o /usr/lib/libz.a /usr/lib/libfoo.a -lbar
Editar 3 Ago 17: Acabo de tropezar con esta respuesta que entra en más detalles y ofrece una forma alternativa ( -l:
para especificar la biblioteca directamente.
Tengo un programa que enlaza con muchas bibliotecas. g++
, de forma predeterminada, prefiere vincular a bibliotecas compartidas, incluso si existe el archivo correspondiente.
¿Cómo puedo cambiar esta preferencia para preferir archivos estáticos sobre bibliotecas dinámicas, si existe un archivo estático?
Tenga en cuenta que utilicé la opción estática, pero trata de encontrar el archivo estático para todas las bibliotecas que no es lo que quiero.
g++ -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
libfoo
zlib
y libfoo
como estáticos, y libbar
como dinámico. --as-needed
soltará cualquier biblioteca dinámica no utilizada.