Linker 如何与libstdc++_图a和GCC?

Linker 如何与libstdc++_图a和GCC?,linker,shared-libraries,static-libraries,libstdc++,Linker,Shared Libraries,Static Libraries,Libstdc++,我的系统上有一个libstdc++_pic.a(Ubuntu 12.04,gcc 4.6.3),大概这是用-fPIC创建的libstdc++版本。我还有一个libstdc++.a 当我尝试通过-static libstdc++链接标志将libstdc++与共享库静态链接时,我看到以下错误: :-1:错误:/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a(functexcept.o):在创建共享对象时,不能根据“std::bad_exception::~b

我的系统上有一个libstdc++_pic.a(Ubuntu 12.04,gcc 4.6.3),大概这是用-fPIC创建的libstdc++版本。我还有一个libstdc++.a

当我尝试通过-static libstdc++链接标志将libstdc++与共享库静态链接时,我看到以下错误:

:-1:错误:/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a(functexcept.o):在创建共享对象时,不能根据“std::bad_exception::~bad_exception()”重新定位R_x86_64_32;用-fPIC重新编译

因此,我假设它使用的是非pic版本,正如我基于默认命名所期望的那样。如何指示链接器使用libstdc++_pic.a文件

更新1 _pic版本位于32位gcc子文件夹中,位于
/usr/lib/gcc/x86_64-linux-gnu/4.6/32
,我在64位版本所在的父文件夹中没有看到_pic版本。我的gcc版本似乎不是用64位PIC静态libstdc++.a编译的

更新2 通过检查我的gcc版本,然后安装程序包,我可以安装64位版本的libstdc++\u pic.a:

gcc--version
gcc(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3
sudo apt get安装libstdc++6-4.6-pic


现在我在
/usr/lib/gcc/x86_64-linux-gnu/4.6/
中看到了它。仍然需要弄清楚如何告诉链接器使用它。

我似乎已经通过传递
-nostdlib
链接器选项,然后显式链接libstdc++\u pic解决了这个问题

但是,现在我得到以下错误:

找不到符号std::basic_string::_M_move(wchar_t*,wchar_t const*,无符号长)的版本节点。@@GLIBCXX_3.4.5

经过研究发现,pic中的静态libstdc++64位可能有一个bug,现在gcc的新版本(4.7.3)中解决了这个bug。另一个问题有更多信息:


后续:我在Ubuntu 12.04上安装并切换到gcc 4.7.3(通过测试工具链存储库),我的程序现在链接并运行成功,我可以看到libstdc++静态链接到共享库中。我不再需要使用libstdc++pic库,因为默认的库是可重新定位的(-static libstdc++就足够了)。