GLIBCXX(libstdc ++。so.6)与gcc版本

时间:2017-11-07 02:40:41

标签: c++ linux gcc g++

[现状]

我正在开发一个c ++库。我对GLIBCXX版本有疑问。

之前,我在版本机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(编译)版本和GLIBCXX(GLIBC)版本之间有什么关系。

  3. 在哪里可以检查gcc和GLIBCXX(GLIBC)之间的正确版本兼容性映射信息?

1 个答案:

答案 0 :(得分:7)

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

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