c++ - 我可以安全地混合使用 -std=c++11 和 -std=c++14 编译的库吗?

标签 c++ c++11 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 相关的)问题的差异?

最佳答案

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

因此,如果您与您的 stdc++ 库一致,没问题。在 libc++、VS 上没有问题...

关于c++ - 我可以安全地混合使用 -std=c++11 和 -std=c++14 编译的库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55296917/

相关文章:

c++ - 为什么我要使用已删除的函数 'void std::ref(const _Tp&&) [with _Tp = int]'

c++ - 同时迭代两个或多个容器的最佳方法是什么

c++ - 内联初始化静态常量类成员的初始化顺序保证

c++ - 非UB constexpr函数将 float 或 double 位移位?

c++ - 使用 Midi 库解析事件并存储在 Vector C++ 中

java - 为单个 DSL 生成两个解析器

c++ - dlib "Filter windows must be small enough to fit into the padded image"

c++ - 邻接链表C++展示

c++ - `for_each_arg` 的正确用法 - 转发过多?

c++ - 我的 epoll 服务器丢失了一些连接。为什么?