[现状]
我正在开发一个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。
[问题]
我的库在gcc-4.8.5上编译不使用GLIBCXX_3.4.22版本吗?在这种环境下开发是否可以(gcc 4.8.5,GLIBCXX_3.4.22)?
linux机器上的gcc(编译)版本和GLIBCXX(GLIBC)版本之间有什么关系。
在哪里可以检查gcc和GLIBCXX(GLIBC)之间的正确版本兼容性映射信息?
答案 0 :(得分:7)
libstdc ++(GLIBCXX_ *版本化符号所在的位置)已从GCC 3.4.0到现在兼容ABI。
您的库将在编译时使用libstdc ++中的最新符号版本。编译器版本无关紧要,除了
GCC 5.1在libstdc ++中添加了“双ABI”的C ++ 11支持。以C ++ 11模式编译的代码将使用带有[abi:cxx11]
标记的符号,并且可能无法与不使用C ++ 11编译的代码互操作(无论是来自没有C ++ 11支持的旧编译器,还是更新的编译器)设置为使用较旧的标准。)
如果你需要构建在旧系统上运行的二进制文件,我建议在容器内部设置一个较旧的发行版,并在那里构建所有旧库。这样,您的开发系统中的任何新功能都不会泄漏到它们中。