如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看相关的知识,希望对你有一定的参考价值。

参考技术A gcc默认使用动态库方式链接,找不到动态库才会去找静态库,若要使用静态库需给链接器指定参数-static。 参考技术B gcc默认使用动态库方式链接,找不到动态库才会去找静态库,若要使用静态库需给链接器指定参数-static。

如何使用 PIC 编译 gnu libstdc++.a?

【中文标题】如何使用 PIC 编译 gnu libstdc++.a?【英文标题】:How do I compile gnu libstdc++.a with PIC? 【发布时间】:2014-04-24 01:03:37 【问题描述】:

我正在尝试为没有足够新的 libstdc++ 来运行它的系统编译一个共享库,这意味着我需要将 libstdc++ 静态链接到库中。我正在尝试直接链接到 libstdc++.a (-Wl,-Bstatic -L/path/to/lib64 -lstdc++),但我收到一个错误,似乎表明我的 libstdc++.a 未与 PIC 链接:

/usr/bin/ld: lib64/libstdc++.a(compatibility.o): relocation R_X86_64_32 against `typeinfo for __cxxabiv1::__forced_unwind' can not be used when making a shared object; recompile with -fPIC
lib64/libstdc++.a: could not read symbols: Bad value

我尝试使用 CFLAGS="-fPIC" 和 CXXFLAGS="-fPIC" 重新编译 GCC,但这似乎没有任何作用。

帮助?

【问题讨论】:

【参考方案1】:

这个想法是将--with-pic 选项传递给configure。 GCC 构建是一个具有多个阶段的非常复杂的野兽,因此简单地传递 CFLAGS 变量可能无法按预期工作。

【讨论】:

这在任何地方都有记录吗?它不在gcc.gnu.org/install/configure.html 但是如果你切换到 /libstdc++-v3 子目录并运行configure --help 你会看到它。 gcc.gnu.org/bugzilla/show_bug.cgi?id=28811 - stdc++ 库的图片问题有一段相当动荡的历史。【参考方案2】:

阅读GCC configure documentation。正如描述中所说,我在构建GCC 时使用了这个标志--enable-host-shared

指定宿主代码应该内置到位置无关 机器码(带 -fPIC),允许在共享中使用 库,但产生的编译器速度稍慢。

【讨论】:

以上是关于如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PIC 编译 gnu libstdc++.a?

libstdc++ - 不使用 qmake 静态链接

gcc升级后静态库要升级吗

libstdc++ 静态链接和 System V ABI

linux升级gc c,Linux升级GCC

gcc:查找 libstdc++ 的目录