[情况]
我正在开发一个 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。
[问题]
我在 gcc-4.8.5 上编译的库是否没有使用 GLIBCXX_3.4.22 版本?可以在这个环境(gcc 4.8.5,GLIBCXX_3.4.22)上开发吗?
在linux机器上gcc(compile)版本和GLIBCXX(GLIBC)版本有什么关系。
哪里可以查看gcc与GLIBCXX(GLIBC)的正确版本兼容性映射信息?
最佳答案
libstdc++(这是 GLIBCXX_* 版本化符号的来源)从 GCC 3.4.0 到现在都是 ABI 兼容的。
您的库将在编译时使用来自 libstdc++ 的最新符号版本。编译器版本无关紧要,除了
GCC 5.1 在 libstdc++ 中通过“双 ABI”添加了 C++11 支持。在 C++11 模式下编译的代码将使用带有
[abi:cxx11]
标记的符号,并且可能无法与未使用 C++11 编译的代码进行互操作(无论是来自未使用 C++ 的旧编译器11 支持,或更新的编译器设置为使用旧标准)。
如果您需要构建在旧系统上运行的二进制文件,我会建议在容器中设置一个旧版本,并在其中构建所有旧库。这样,您的开发系统中的任何新内容都不会泄漏到它们中。
关于c++ - GLIBCXX(libstdc++.so.6)与gcc版本的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47149139/