如何使用PIC编译gnu libstdc ++。a?

时间:2014-04-24 01:03:37

标签: c++ gcc ld

我正在尝试为没有足够运行它的libstdc ++的系统编译共享库,这意味着我需要将libstdc ++静态链接到库中。我试图直接链接到libstdc ++。(-Wl,-Bstatic -L/path/to/lib64 -lstdc++),但是我收到的错误似乎表明我的libstdc ++。a与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

我尝试用CFLAGS =" -fPIC"重新编译GCC。和CXXFLAGS =" -fPIC",但似乎没有做任何事情。

帮助?

2 个答案:

答案 0 :(得分:6)

我们的想法是将--with-pic选项传递给configure。 GCC构建是一个非常复杂的具有多个阶段的野兽,因此简单地传递CFLAGS变量可能无法按预期工作。

答案 1 :(得分:0)

阅读GCC configure documentation。我在构建--enable-host-shared时使用了这个标志GCC,如说明中所述:

  

指定主机代码应构建为与位置无关的   机器代码(带-fPIC),允许在共享中使用   库,但产生稍慢的编译器。