[英]Can I link an object compiled with clang c++11 with another compiled with 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.