将不同的C ++标准与GCC混合

时间:2016-06-27 14:41:02

标签: c++ c++11 gcc c++98

我有以下情况:

有两个组件,一个用C ++ 11编写,另一个用C ++ 98编写。 两者都是使用相同的GCC 4.9从头开始编译的。一个使用隐式默认--std=gnu++98,另一个显式设置--std=c++11

即使做了一些研究,我也无法完全回答这个问题是否会引起问题。

GCC wiki说:

  

C ++ 98语言与C ++ 11语言ABI兼容,但库中的几个地方破坏了兼容性。这使得将C ++ 98对象与C ++ 11对象链接起来很危险。如果您可以在匹配的语言版本中重新编译代码,那么您应该这样做。

这表明存在问题。

所以问题是:

  1. 如果将使用--std=gnu++98--std=c++11构建的两个组件链接在一起,即使很难使用相同的libstdc++并使用相同的编译器(GCC 4.9)构建也会出现问题)?

  2. Dual ABI支持表单GCC 5.1会对此有影响吗?

1 个答案:

答案 0 :(得分:0)

1)可能存在问题,例如,您提到的某些lib部分的实现发生了变化。

2)是的。

我会在两个c ++版本之一中重新编译所有内容。如果这不是一个选项(第三方库等),使用双ABI机制可能是一个解决方案。要非常小心不同版本的代码之间的共享内容。

你提到的wiki部分讨论了一些情况,例如旧代码试图做不再支持的东西(不同的语义但语法相同)。