2014-04-24 10 views
5

Ich versuche eine gemeinsam genutzte Bibliothek für Systeme zu kompilieren, die kein libstdC++ haben, das neu genug ist, um es auszuführen, was bedeutet, dass ich libstdC++ in die Bibliothek statisch verknüpfen muss. Ich versuche, direkt verlinken auf libstdC++ ein (-Wl,-Bstatic -L/path/to/lib64 -lstdc++), aber ich erhalte eine Fehlermeldung, dass das mein libstdC++, um anzuzeigen, scheint nicht mit PIC verbunden war..Wie kompiliere ich gnu libstdC++. A mit 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 

I GCC versucht neu zu kompilieren mit CFLAGS = "- fPIC" und CXXFLAGS = "- fPIC", aber das schien nichts zu tun.

Hilfe?

Antwort

6

Die Idee besteht darin, --with-pic Option an die configure zu übergeben. GCC-Build ist ein sehr komplexes Biest mit mehreren Stufen, daher reicht es nicht aus, einfach eine CFLAGS-Variable zu übergeben.

+0

Ist das irgendwo dokumentiert? Es ist nicht auf http://gcc.gnu.org/install/configure.html – bobpoekert

+0

Aber wenn Sie in /libstdC++ - v3 Unterverzeichnis wechseln und 'configure --help' dort ausführen, werden Sie es sehen. – oakad

+1

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28811 - Das Bildproblem mit stdC++ libs hat eine ziemlich turbulente Geschichte. – oakad

0

Lesen GCC configure documentation. Ich habe diesen Flag --enable-host-shared beim Bau GCC, wie es in der Beschreibung gesagt:

angeben, dass der Host-Code in positionsunabhängigen Maschinencode gebaut werden soll (mit -fPIC), so dass sie innerhalb geteilt verwendet werden, Bibliotheken, aber einen etwas langsameren Compiler ergeben.

Verwandte Themen