2014-04-24 8 views
5

Sto provando a compilare una libreria condivisa per sistemi che non hanno un libstdC++ abbastanza nuovo per eseguirlo, il che significa che ho bisogno di collegare staticamente libstdC++ nella libreria. Sto cercando di collegarsi direttamente ad un libstdC++ (-Wl,-Bstatic -L/path/to/lib64 -lstdc++), ma sto ottenendo un errore che sembra indicare che il mio libstdC++ A non è stato collegato con PIC:..Come si compila gnu libstdC++. A con PIC?

/usr/bin/ld: lib64/libstdc++.a(compatibility.o): relocation R_X86_64_32 against `typeinfo for __cxxabiv1::__forced_unwind' can not be used when making a shared object; recompile with -fPIC 
lib64/libstdc++.a: could not read symbols: Bad value 

Ho provato a ricompilare GCC con CFLAGS = "- fPIC" e CXXFLAGS = "- fPIC", ma sembra che non abbia fatto nulla.

Aiuto?

risposta

6

L'idea è di passare l'opzione --with-pic allo configure. GCC build è una bestia molto complessa con stadi multipli, quindi il semplice passaggio di una variabile CFLAGS potrebbe non funzionare come previsto.

+0

È documentato ovunque? Non è su http://gcc.gnu.org/install/configure.html – bobpoekert

+0

Ma se si passa alla sottodirectory /libstdC++ - v3 e si esegue 'configure --help', lo vedrai. – oakad

+1

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28811 - il problema delle pic con le librerie stdC++ ha una storia abbastanza turbolenta. – oakad

0

Lettura GCC configure documentation. Ho usato questo flag --enable-host-shared quando si costruisce GCC quanto detto nella descrizione:

specificare che il codice host deve essere costruito in codice macchina indipendente dalla posizione (con -fPIC), consente di essere utilizzato entro condiviso librerie, ma producendo un compilatore leggermente più lento.

Problemi correlati