Błąd linkowania przy budowaniu SO (związany z R_X86_64_32

0

Witam,

Dostałem ostatnio maszynę z 64 bitowym procesorem ( Intel(R) Pentium(R) 4 CPU 3.40GHz (3400.02-MHz K8-class CPU) ). Potrzebuję na niej skompilować bibliotekę xerces-c v. 2.7.0, lecz nie do końca mi to wychodzi. Otóż po udanej kompilacji wszelkich źródeł niestety linker zgłasza błąd:

/usr/bin/ld: /usr/lib/libgcc.a(unwind-dw2.o): relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC
/usr/lib/libgcc.a: could not read symbols: Bad value

(chyba nie muszę dodawać, że przekompilowanie źródeł z opcją -fPIC daje ten sam rezultat).

Do zlinkowania biblioteki dzielonej g++ używa następujących opcji:

g++ -DFREEBSD -shared -fPIC  -Wl,-soname,libxerces-c.so.27 (obiekty)  -L/usr/local/ -L/usr/local//lib -L/usr/local//data  -pthread -lc_r  -L/usr/local/lib -L/usr/local/ -licuuc -licudata -lgcc 

Do kompilacji poszczególnych obiektów:

-fPIC -w -O -DNDEBUG -DPROJ_XMLPARSER  -DPROJ_XMLUTIL  -DPROJ_PARSERS  -DPROJ_SAX4C  -DPROJ_SAX2  -DPROJ_DOM -DPROJ_DEPRECATED_DOM -DPROJ_VALIDATORS -DXML_USE_ICU_TRANSCODER -I/usr/local//include -DXML_USE_INMEM_MESSAGELOADER -D_THREAD_SAFE -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET

Podaję także opcję skryptu runConfigure:

./runConfigure -pfreebsd -ticu -cgcc -xg++ -minmem -nsocket -rpthread -z-fPIC -b64

Po zawziętym googlowaniu doszedłem do wniosku, że ten problem nie jest zbyt popularny. Może ktoś z Was się z nim spotkał, lub przynajmniej wie czego on dotyczy. Podczas kompilacji innych bibliotek ten problem nie występuje.

Chciałbym dodatkowo zaznaczyć, że zmiana biblioteki na inną nie wchodzi w grę.

Za każdą pomoc serdeczne dzięki.

0

Na szczęście udało mi się rozwiązać problem. Okazało się, że autorzy linkują złą bibliotekę. Zamiast libgcc na maszynie 64-bitowej na platformie FreeBSD należy dolinkować libgcc_pic. (2 dni bujania się o taki szczegół :/ ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1