在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
但失败了,并提供以下信息:在创建共享对象时,不能使用针对`vtable for __gnu_cxx :: stdio_filebuf>的重定位R_X86_64_32S;用-fPIC重新编译
我尝试重新编译libstdc库,添加了-fPIC,但无论如何都失败了
2 回答
There是关于stackoverflow关于此主题的类似问题,它引用了关于libstdc的静态链接的external site .
我希望静态libstdc库不是用
-fPIC
构建的,因此无法链接到共享库 .从理论上讲,你可以将非PIC编译的代码放入动态库中,但它不可共享(每个使用它的程序都必须有自己的副本)所以它通常没有实现 .
您将需要链接共享C库,使您自己的库成为静态库,或者自己重建libstdc并从构建目录中获取.o文件 .