gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:28:39 27 4
gpt4 key购买 nike

[情况]

我正在开发一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com