如何使用的libstdc ++ _用GCC pic.a链接?(How to link with li

2019-11-03 15:13发布

我有一个的libstdc ++ _ pic.a我的系统(Ubuntu的12.04,GCC 4.6.3)上,想必这是-fPIC创建的libstdc ++版本。 我也有一个的libstdc ++。一。

我看到下面的错误,当我尝试静态链接的libstdc ++与通过-static-的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

所以我假设它是利用非PIC的版本,因为我希望基于默认命名。 我怎么可以指示使用的libstdc ++ _ pic.a文件的链接?

更新1 _pic版本是在32位的gcc子/usr/lib/gcc/x86_64-linux-gnu/4.6/32 ,我也不在了64个版本所在的父文件夹看_pic版本。 看来,我的gcc版本不能在64位PIC静态的libstdc ++编译。

更新2我能安装的libstdc 64位版本++ _通过检查我的gcc版本,然后安装包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/ 。 仍然需要弄清楚如何告诉链接器使用它。

Answer 1:

我似乎被传递到有固定的这个-nostdlib链接器选项,然后明确链接的libstdc ++ _照片。

不过,现在我收到以下错误:

version node not found for symbol std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_move(wchar_t*, wchar_t const*, unsigned long)@@GLIBCXX_3.4.5

经过研究似乎有可能是与PIC静态的libstdc ++ 64位,这是目前在海湾合作委员会(4.7.3)的更新版本解决的错误。 这另一个问题提供了更多信息:

在Linux上编译一个共享库的目标所有发行



文章来源: How to link with libstdc++_pic.a with GCC?