【发布时间】:2019-09-07 21:39:20
【问题描述】:
Is it safe to link C++17, C++14, and C++11 objects 询问有关链接使用不同语言标准编译的对象的问题,Jonathan Wakely 对该问题的出色回答解释了 gcc/libstdc++ 为确保其有效而做出的 ABI 稳定性承诺。
还有一件事可以在 gcc 版本之间改变 - 通过-fabi-version 的语言 ABI。假设,为简单起见,我有三个目标文件:
-
foo.o,使用 gcc 6.5 c++14 编译 -
bar.o,使用 gcc 7.4 c++14 编译 -
quux.o,使用 gcc 8.3 c++17 编译
全部使用各自的默认语言 ABI(即 10、11 和 13)。根据链接的答案,从库的角度来看,将这些对象链接在一起是安全的。但是从语言 ABI 的角度来看,有没有可能出错的地方?有什么我应该注意的吗?大多数语言 ABI 更改似乎不会引起问题,但是 12 中空类类型的调用约定更改可能会?
【问题讨论】: