Pas*_*cal 8 c++ gcc c++11 c++98
我有以下场景:
有两个组件,一个用C++ 11编写,另一个用C++ 98编写.两者都是使用相同的GCC 4.9从头开始编译的.一个使用隐式默认值--std=gnu++98
,另一个显式设置--std=c++11
.
即使在做了一些研究后,如果这可能导致问题,我也无法完全回答这个问题.
在GCC维基说:
C++ 98语言与C++ 11语言ABI兼容,但库中的几个地方打破了兼容性.这使得将C++ 98对象与C++ 11对象链接起来很危险.如果您可以在匹配的语言版本中重新编译代码,那么您应该这样做.
这表明存在问题.
所以问题是:
如果这两个组件构建在一起--std=gnu++98
并且--std=c++11
链接在一起是否存在问题,即使是使用相同的libstdc++
并且使用相同的编译器构建(GCC 4.9)也很困难?
是否双ABI支持形式GCC 5.1在这种情况下的影响?
小智 2
1)可能存在问题,例如,您提到的库的某些部分的实现发生了变化。
2)是的。
我会在两个 C++ 版本之一中重新编译所有内容。如果这不是一个选项(第三方库等),那么使用双 ABI 机制可能是一个解决方案。要非常小心不同版本的代码之间共享的内容。
您提到的 wiki 部分讨论了一些情况,例如,旧代码尝试执行不再支持的操作(语义不同但语法相同)。