繁体   English   中英

我可以将使用clang c ++ 11编译的对象与使用c ++ 17编译的另一个对象链接起来

[英]Can I link an object compiled with clang c++11 with another compiled with c++17

我正在寻找这个问题的答案。 如果我使用-std=c++11编译一个对象而使用-std=c++17编译另一个对象可以安全地链接吗?

Jonathan Wakely在这里发布的答案对于Clang来说也是正确的。

简单回答 :如果您自己编译两个对象,您选择的-std选项不会影响最终结果。

大多数给定的C ++ ABI由标准库决定。 其余的是各种运行时支持,例如异常,编译器内置(可能实际调度到标准库),以及类似的东西。 libstdc++ ABI兼容性是Clang的明确目标,所以你可以在这里。

如果您使用的是相同的编译器版本,则-std选项将更改编译时公开给代码的符号。 但是,libstdc ++用于稳定功能的ABI是向前兼容的,所以你也可以在这里使用。

更难回答 :你的评论建议你有源代码,但如果你只有目标文件而且只是做最后的链接,除非用于构建std=c++11对象的Clang版本是很古老。 g++libstdc++作者不再使用版本符号,所以你有一些链接的机会,但是以难以诊断的方式失败的基本上是零。 (这在Jonathan的答案的倒数第二段中提到)。

再说一遍,既然Clang的目标是保持与libstdc++的ABI的兼容性,你应该没问题。 还有其他细节,但绝大多数都是在Jonathan的回答中解决的,而且他比我更能解释它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM