我有以下情况:用GCC混合不同的C++标准
有两个组件,一个是用C++ 11编写的,另一个是用C++ 98编写的。 两者都使用相同的GCC 4.9从头开始编译。一个使用隐式默认--std=gnu++98
另一个明确设置--std=c++11
。
即使做了一些研究,我也无法完全回答这个问题,如果这可能会导致问题。
的GCC wiki说:
的C++语言98 ABI是兼容的C++语言的11,但在图书馆休息兼容性好几个地方。这使得将C++ 98对象与C++ 11对象链接起来非常危险。如果您可以使用该语言的匹配版本重新编译代码,则应该这样做。
这表明问题是可以预料的。
所以问题是:
有没有,如果有
--std=gnu++98
和--std=c++11
建造的两个部件连接在一起的问题,甚至是艰难的,他们使用相同的libstdc++
和相同的编译器(GCC 4.9)都建?请问Dual ABI支持形式GCC 5.1在这种情况下有影响吗?
我建议只用'-std = C++ 11'(或GNU方言)构建。 –
这将是理想的,但在这种情况下,第一个组件的编译无法在使用C++ 98更新的情况下编译时进行编译,并且现在无法进行更改。 – Pascal
使用'std :: string'?其次,那些打破变化的人,也许你应该对他们感到害怕:许多“休息”可能是实际的错误。 – Yakk