GLIBCXX(libstdc++.so.6)与gcc版本之间的关系



【情况】

我正在开发一个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(compile)版本和GLIBCX(GLIBC)版本之间的关系是什么。

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

libstdc++(GLIBCXX_*版本符号的来源)从GCC 3.4.0到现在一直与ABI兼容。

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

  2. GCC 5.1在libstdc++中添加了对C++11的支持和"双ABI"。以C++11模式编译的代码将使用带有[abi:cxx11]标记的符号,这些符号可能无法与未使用C++11编译的代码进行互操作(无论是来自不支持C++11的旧编译器,还是设置为使用旧标准的新编译器)。

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

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

最新更新