1

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

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

但失败了,信息如下:relocation R_X86_64_32S against `vtable for __gnu_cxx::stdio_filebuf >' can not be used when making a shared object; 使用 -fPIC 重新编译

我尝试重新编译 libstdc++ 库,添加了 -fPIC,但它还是失败了

4

2 回答 2

0

我希望静态libstdc++ 库不是用 构建的-fPIC,因此不能链接到共享库中。

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

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

于 2012-05-09T11:04:25.443 回答
0

stackoverflow上有一个关于这个主题的类似问题,它指的是一个关于libstdc++静态链接的外部站点。

于 2012-05-09T13:39:36.180 回答