【问题标题】:Can i safely mix libraries compiled with -std=c++11 and -std=c++14? [duplicate]我可以安全地混合使用 -std=c++11 和 -std=c++14 编译的库吗? [复制]
【发布时间】:2019-08-13 06:44:45
【问题描述】:

从 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++11 c++14


    【解决方案1】:

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

    因此,如果您与您的 stdc++ 库保持一致,那没问题。 libc++,VS上没问题...

    【讨论】:

    • 对不起,如果我在我的问题中不清楚这一点。但 C++98 的情况只是一个类比,也是我谨慎的原因——我说的是混合 c++11 和 c++14,而不是 c++98 和 c++11...
    • 我回答说,问题不在于不同的 C++ 版本,这是因为 libstdc++ 维护者决定一次破坏他们的 API。只要你有一个一致的 libstdc++ 就可以安全地混合不同的 C++ 标准(其他的总是很好 AFAIK)。
    • 啊,我不知何故误读了那部分。顺便说一句,搜索整个 stdc++ 库的情况让我注意到我的问题实际上是我以前没有找到的重复项。看看我的近距离投票...
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2015-05-03
    • 2019-02-18
    • 2015-09-12
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多