2010-12-21 16 views
25

Supongamos que tengo un archivo main.cpp que usa la función sin() que se define en libmath. Supongamos también que tenemos tanto libmath.a como libmath.so disponibles en el mismo directorio. Ahora, si ejecuto el comando g++ -o main main.cpp -lmath, el comportamiento predeterminado de Linux es vincular a la biblioteca compartida libmath.so. Quiero saber si hay alguna manera de forzar al programa a vincularse con la biblioteca estática libmath.a sin eliminar o mover la biblioteca compartida.¿Cómo puedo forzar el enlace con una biblioteca estática cuando hay una biblioteca compartida del mismo nombre?

+2

duplicado posible de [g ++ enlazador: forzar la vinculación estática si existe biblioteca estática? ] (http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) –

Respuesta

20

Deberá pasar el estado-estático al vinculador, pero solo para las bibliotecas particulares que desee. por ejemplo:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic 
+3

Creo que te refieres a "-Bstatic" en lugar de "-static". Lástima que las ediciones de un solo carácter no están permitidas ... –

+0

Seguramente no debería importar para gcc/binutils, -static y -Bstatic son sinónimos en el enlazador GNU. – nos

4

Utilice esta función:

g++ -o main main.cpp /path_to/libmath.a 
8

Si el enlazador apoya -l:<filename> puede usar:

g++ -o main main.cpp -l:libmath.a 
Cuestiones relacionadas