首页 >后端开发 >C++ >C 11、C 14 和 C 17 对象能否安全链接在一起?

C 11、C 14 和 C 17 对象能否安全链接在一起?

Linda Hamilton
Linda Hamilton原创
2024-12-04 08:07:17703浏览

Can C  11, C  14, and C  17 Objects Be Safely Linked Together?

链接 C 17/14/11 对象

假设您有多个来自同一编译器/版本的已编译对象:其中一个是用 C 11 编译的,另一个使用 C 14,第三个使用 C 17。假设所有标头都使用 C 11 结构,并且有没有相互依赖关系,这些对象的哪些组合可以安全地链接到单个二进制文件中?

GCC

对于 GCC,链接这些对象的任何组合都是安全的。标准版本(-std 选项)不会影响 ABI 兼容性,因为实现确保了此属性。

但是,当链接使用不同 GCC 版本编译的对象并使用较新 C 标准中的不稳定功能时,会出现问题编译器的支持已经完成。因此,使用 -std=c 11 链接使用 GCC 版本 4.9 和 5 编译的对象或使用 -std=c 17 链接使用 GCC 版本 7 和 8 编译的对象将导致问题。

其他注意事项

  • libstdc .so 共享库应该来自等于或晚于的 GCC 版本用于编译任何对象。
  • 字符串实现必须在所有对象中保持一致。使用 -D_GLIBCXX_USE_CXX11_ABI=0 或 1 进行编译以分别选择 gcc4 兼容或新的 cxx11 实现。

以上是C 11、C 14 和 C 17 对象能否安全链接在一起?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn