c++ - GLIBCXX(libstdc++.so.6)与gcc版本的关系

标签 c++ linux gcc g++

[情况]

我正在开发一个 C++ 库。我遇到了 GLIBCXX 版本的问题。

之前,我在版 native GLIBCXX_3.4.22上开发。

但我的库无法在具有 GLIBCXX_3.4.19 的目标机器上运行。

因此,我将 gcc 版本从 5.2.x 降级到 4.8.x,并将 GLIBCXX 版本从 3.4.22 降级到 3.4.19。

在目标机器上成功运行。

但是我的开发机器(ubuntu)启动失败,因为其他库找不到已经链接到该版本的 GLIBCXX 3.4.22 版本。

所以,我重新安装了 GLIBCXX 3.4.22,但 gcc 版本仍然是 4.8.5。

[问题]

  1. 我在 gcc-4.8.5 上编译的库是否没有使用 GLIBCXX_3.4.22 版本?可以在这个环境(gcc 4.8.5,GLIBCXX_3.4.22)上开发吗?

  2. 在linux机器上gcc(compile)版本和GLIBCXX(GLIBC)版本有什么关系。

  3. 哪里可以查看gcc与GLIBCXX(GLIBC)的正确版本兼容性映射信息?

最佳答案

libstdc++(这是 GLIBCXX_* 版本化符号的来源)从 GCC 3.4.0 到现在都是 ABI 兼容的。

  1. 您的库将在编译时使用来自 libstdc++ 的最新符号版本。编译器版本无关紧要,除了

  2. GCC 5.1 在 libstdc++ 中通过“双 ABI”添加了 C++11 支持。在 C++11 模式下编译的代码将使用带有 [abi:cxx11] 标记的符号,并且可能无法与未使用 C++11 编译的代码进行互操作(无论是来自未使用 C++ 的旧编译器11 支持,或更新的编译器设置为使用旧标准)。

  3. https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

如果您需要构建在旧系统上运行的二进制文件,我会建议在容器中设置一个旧版本,并在其中构建所有旧库。这样,您的开发系统中的任何新内容都不会泄漏到它们中。

关于c++ - GLIBCXX(libstdc++.so.6)与gcc版本的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47149139/

相关文章:

gcc - 谁能解释一下 gcc 交叉编译器的命名约定?

c++ - 从 vector 的 vector 填充 vector 的有效方法是什么?

c++ - 如何在mfc中打开类中的文件?

c++ - 字符串数组 C++ 的段错误

linux - Linux服务器上崩溃后如何自动重新启动elasticsearch搜索?

Linux - 使用平移和缩放创建动画 gif

C-X11 API : Custom Control Redraw Issue

c - gcc 生成 .o 文件而不是可执行文件

c++ - 将 x264vfw 连接到自定义源过滤器

linux - 在 Linux 内核中调用给定函数的上下文