2011-05-21 15 views
7

Estoy enfrentando los siguientes errores al intentar vincular estáticamente libDuma, ¿Puede decirme cómo pedir a g ++ que use malloc de libDuma?Cómo resolver los errores de definición múltiple en gcc linux?

[email protected]:~/CodeTest$ g++ ./testDuma.cpp -g -o testDuma -static -lduma -pthread 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libc.a(malloc.o): In function `free': 
(.text+0x4b00): multiple definition of `free' 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libduma.a(duma.o):(.text+0x25f0): first defined here 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libc.a(malloc.o): In function `malloc': 
(.text+0x4bc0): multiple definition of `malloc' 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libduma.a(duma.o):(.text+0x2730): first defined here 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libc.a(malloc.o): In function `realloc': 
(.text+0x5950): multiple definition of `realloc' 
/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libduma.a(duma.o):(.text+0x23d0): first defined here 
collect2: ld returned 1 exit status 

Respuesta

3

No fuerce un enlace completamente estática (no usar la bandera -static) - hacerlo en cualquier sistema UNIX moderno es una muy mala idea (TM)

En su lugar, enlace solo libduma estáticamente. Cualquiera de estos comandos debería funcionar:

g++ ./testDuma.cpp -g -pthread -o testDuma /path/to/libduma.a 
g++ ./testDuma.cpp -g -pthread -o testDuma -Wl,-Bstatic -lduma -Wl,-Bdynamic 
1

Añadir -nodefaultlibs bandera para no vincular a libc. O, retire -lduma y enlazarla dinámicamente después de la compilación con:

LD_PRELOAD=/usr/lib/libduma.so ./testDuma 
+0

con -nodegaultlibs no está compilando, necesito vincular estáticamente libDuma y es obligatorio para mí, aquí están los errores que estoy recibiendo http://pastebin.com/ydrdqN0J – SunnyShah

+0

@SunnyShah: No estoy seguro de si funcionará correctamente, pero pruebe la bandera del enlazador '-z muldefs'. Me gusta: 'g ++ testDuma.cpp -static -g -o testDuma -lduma -lpthread -Xlinker -z -Xlinker muldefs' –

+0

Gracias por responder, una duda, alguna idea sobre cómo pedirle a G ++ que use los símbolos de duma y no de libc? – SunnyShah

Cuestiones relacionadas