相关疑难解决方法(0)

链接C++ 17,C++ 14和C++ 11对象是否安全

假设我有三个编译对象,都是由相同的编译器/版本生成的:

  1. A是用C++ 11标准编译的
  2. B是用C++ 14标准编译的
  3. C是用C++ 17标准编译的

为简单起见,我们假设所有头文件都是用C++ 11编写的,只使用其语义在所有三个标准版本之间没有变化的构造,因此任何相互依赖性都用头包含正确表达,编译器没有反对.

这些对象的组合是什么,链接到单个二进制文件是不安全的?为什么?


编辑:欢迎涵盖主要编译器(例如gcc,clang,vs ++)的答案

c++ linker abi c++11 c++14

69
推荐指数
2
解决办法
6748
查看次数

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

我有以下场景:

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

即使在做了一些研究后,如果这可能导致问题,我也无法完全回答这个问题.

GCC维基说:

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

这表明存在问题.

所以问题是:

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

  2. 是否双ABI支持形式GCC 5.1在这种情况下的影响?

c++ gcc c++11 c++98

8
推荐指数
1
解决办法
1960
查看次数

标签 统计

c++ ×2

c++11 ×2

abi ×1

c++14 ×1

c++98 ×1

gcc ×1

linker ×1