【发布时间】:2015-02-18 20:47:04
【问题描述】:
我的系统上有一个 libstdc++_pic.a(Ubuntu 12.04,gcc 4.6.3),大概这是使用 -fPIC 创建的 libstdc++ 版本。我也有一个 libstdc++.a。
当我尝试通过 -static-libstdc++ 链接标志将 libstdc++ 与共享库静态链接时,我看到以下错误:
:-1: error: /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a(functexcept.o): relocation R_X86_64_32 against `std::bad_exception::~bad_exception()' can not be used when making a shared object; recompile with -fPIC
所以我假设它使用的是非图片版本,正如我所期望的基于默认命名的那样。如何指示链接器使用 libstdc++_pic.a 文件?
更新 1
_pic 版本位于/usr/lib/gcc/x86_64-linux-gnu/4.6/32 的 32 位 gcc 子文件夹中,而我在 64 位版本所在的父文件夹中看不到 _pic 版本。看来我的 gcc 版本不是用 64 位 PIC 静态 libstdc++.a 编译的。
更新 2 通过检查我的 gcc 版本然后安装包,我能够安装 64 位版本的 libstdc++_pic.a:
gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
sudo apt-get install libstdc++6-4.6-pic
现在我在/usr/lib/gcc/x86_64-linux-gnu/4.6/ 中看到了它。仍然需要弄清楚如何告诉链接器使用它。
【问题讨论】:
标签: linker shared-libraries static-libraries libstdc++