How to solve multiple definition errors in gcc linux?

I am encountering errors when trying to statically link libDuma, could you tell me how to ask g ++ to use malloc from libDuma?

sunny@sunny-laptop :~/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 
+7
source share
2 answers

Do not force a fully static link (do not use the -static flag) - this is done on any modern UNIX system, this is a very bad idea (TM).

Instead, only link libduma statically. Any of these commands should work:

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

Add the -nodefaultlibs flag to not reference libc. Or remove -lduma and dynamically bind it after compilation with:

 LD_PRELOAD=/usr/lib/libduma.so ./testDuma 
+1
source

All Articles