使用静态链接的libstdc ++创建共享库时失败

时间:2012-05-09 09:05:12

标签: gcc libstdc++ fpic

在64位x86机器中使用gcc 4.5.1,我首先创建a.o如下: g ++ -fPIC -c a.cc -o a.o

然后尝试创建liba.so,如下所示: g ++ -static-libstdc ++ -shared -W1,-soname,liba.so -o liba.so.1.0.0 a.o

但失败了,并提供以下信息: 重新定位R_X86_64_32S对`vtable for __gnu_cxx :: stdio_filebuf>'制作共享对象时不能使用;用-fPIC重新编译

我尝试重新编译libstdc ++库,添加了-fPIC,但无论如何都失败了

2 个答案:

答案 0 :(得分:0)

我希望 static libstdc ++库使用-fPIC构建,因此无法链接到共享库。

理论上你可以将非PIC编译的代码放入动态库中,但它不可共享(每个使用它的程序都必须有自己的副本)所以它通常没有实现。

您需要链接共享C ++库,使您自己的库成为静态库,或者自己重建libstdc ++并从构建目录中获取.o文件。

答案 1 :(得分:0)

There是关于stackoverflow的这个主题的类似问题,它引用了关于libstdc ++的静态链接的external site