首页 > 解决方案 > 我可以安全地混合使用 -std=c++11 和 -std=c++14 编译的库吗?

问题描述

从 C++98 和 C++11 过渡的早期开始,我记得在将 C++98 库和 C++11 库链接在一起时出现了一些与 ABI 相关的麻烦。(参见例如Mixing different C++ standards with GCC以及该问题的答案。)

我有一种特殊情况,我的代码一部分需要用只支持C++11的工具编译,另一部分使用C++14的特性,可以用支持它们的标准g++编译。我可以将代码的每一部分放入自己的库中并链接它们。但我想知道:一般来说,C++11 和 C++14 之间是否存在任何会导致(例如 ABI 相关)问题的差异?

标签: c++c++11c++14

解决方案


gcc 的混淆是 stdc++ 的决定(甚至不是 gcc)。当您将宏设置为不同的状态时,它们确实不兼容,但是如果您始终如一地设置,您可以将 C++98 与 C++11 与 libstdc++ 混合使用。例如,在 RedHat 上,默认的 gcc 编译器是旧的并且不支持 C++11,因此具有较新编译器的 devtools 默认将宏设置为旧 ABI,以便它们始终兼容。

所以如果你和你的 stdc++ 库一致,没问题。在 libc++ 上没问题,VS...


推荐阅读