c++ - 我可以安全地混合使用 -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 相关)问题的差异?
解决方案
gcc 的混淆是 stdc++ 的决定(甚至不是 gcc)。当您将宏设置为不同的状态时,它们确实不兼容,但是如果您始终如一地设置,您可以将 C++98 与 C++11 与 libstdc++ 混合使用。例如,在 RedHat 上,默认的 gcc 编译器是旧的并且不支持 C++11,因此具有较新编译器的 devtools 默认将宏设置为旧 ABI,以便它们始终兼容。
所以如果你和你的 stdc++ 库一致,没问题。在 libc++ 上没问题,VS...
推荐阅读
- jquery - 使用 cypress 访问 iframe 中的元素时出错
- javascript - 基于特定规则计算停车费的算法
- stata - 删除具有相同观察值的变量
- amazon-web-services - 为 AWS IoT 限制设置警报
- sql - 是否有可能在一个 GROUP BY 中有多个 CASE 可以使它完全不分组?
- excel - 比较 2 excel 中的列,如果匹配,则将相应的其他列值从 2nd excel 复制到 1st excel
- regex - 解析 default-regex-filters.txt 中的规则时,Stormcrawler 和正则表达式?
- java - Service内部的测试方法
- php - 有人可以在 PHP strtotime 中解释这种奇怪的行为吗
- r - skimr:如何获得前 3 和后 3 的值?