Linkelési probléma (clang, addressanitizer, etc)

 ( axt | 2012. július 30., hétfő - 11:12 )

Már több mint 'n' órát töltöttem el az alábbi problémával, és gondoltam hátha valaki ránézésre megmondja mi a hiba:

Ez tökéletesen lefut:

ld {flags} -o {outfile} {f1.o} {f2.o} ... {fn.o} {libxx.a}

vagy konkrét példával:

gcc -m64  -Xlinker -O1 -ldl -lpthread  -o ../generated/adfiles/adlc 
../generated/adfiles/adlparse.o ../generated/adfiles/archDesc.o ../generated/adfiles/arena.o
 ../generated/adfiles/dfa.o ../generated/adfiles/dict2.o ../generated/adfiles/filebuff.o
 ../generated/adfiles/forms.o ../generated/adfiles/formsopt.o ../generated/adfiles/formssel.o
 ../generated/adfiles/main.o ../generated/adfiles/adlc-opcodes.o ../generated/adfiles/output_c.o
 ../generated/adfiles/output_h.o 
/home/axt/clang+llvm-3.1-x86_64-linux-ubuntu_12.04/lib/clang/3.1/lib/linux/libclang_rt.asan-x86_64.a

De én csak a -o "../generated/adfiles/adlc" előtti részt tudom szerkeszteni, ezért gondoltam átírom a következő alakra:

ld {flags} -L{path to libxx.a} -lxx -o {outfile} {f1.o} {f2.o} ... {fn.o}

 gcc -m64  -Xlinker -O1 -ldl -lpthread -L /home/axt/clang+llvm-3.1-x86_64-linux-ubuntu_12.04/lib/clang/3.1/lib/linux/
 -lclang_rt.asan-x86_64 -o ../generated/adfiles/adlc 
../generated/adfiles/adlparse.o ../generated/adfiles/archDesc.o ../generated/adfiles/arena.o ../generated/adfiles/dfa.o ../generated/adfiles/dict2.o ../generated/adfiles/filebuff.o 
../generated/adfiles/forms.o ../generated/adfiles/formsopt.o ../generated/adfiles/formssel.o 
../generated/adfiles/main.o ../generated/adfiles/adlc-opcodes.o ../generated/adfiles/output_c.o 
../generated/adfiles/output_h.

Ez meg halom "undefined reference to"-t dob azokra a függvénynevekre amik libxx-ben vannak.

Sajnos .so-fordítani a .a-ból nem járható út.

Minden ötletet előre köszönök.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nem ez a te gondod?

Nevezetesen: "If any library A depends on symbols defined in library B, then library A should appear first in the list supplied to the linker"

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

+1

Köszi! Igazatok lesz, ha a ".a" filet átmozgatom a ".o"-k elé az első példában, akkor hibás lesz, cserébe ha a második példában a -l{xx} -L{pathtoxx} -et a ".o"-k után adom meg, akkor viszont megjavul.

A dolog tehát tényleg csak a sorrend függvénye.

Már csak bele kell hackelnem valahogy a makefileba.