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

Yoo*_*Lee 2 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)之间的正确版本兼容性映射信息?

eph*_*ent 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

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