我可以使用gcc编译一个函数,然后在clang中使用它吗?

我试图用clang / llvm来使用SSE4.2 intrinsics,但不能编译,因为我cannot select intrinsic从LLVM中cannot select intrinsic错误。 另一方面,相同的代码在gcc中完美地编译。 所以我想,也许我可以使用gcc编译该函数,以便拥有一个对象或库文件,然后在我的代码中调用该库函数,该代码由clang / llvm编译。 这会起作用吗?


可以在Linux中使用GCC编译目标文件并将其转换为在Visual Studio中工作。 我最近在Windows上的Virtual Box中执行了这个操作,将Linux转换为c-object-file-from-linux-o-to-windows-obj,因此在Linux或Windows上也应该可以使用Clang。

所以这不仅可以通过交叉编译器完成,它可以跨平台完成

您需要调用约定和对象文件格式正确(并且对于C ++,名称也会变形)。 使用GCC编译时,可以告诉它哪个调用约定/ API与mabi一起使用。 然后,如果从Linux到Windows,需要一个目标文件转换器,例如将Linux上的ELF转换为Windows上的COFF。 当然,有些情况下这可能不起作用(例如,如果模块依赖于仅在一个平台中的系统调用)。 请参阅上面的链接了解更多详情。


对于任何或多或少复杂的c ++代码,例如编译为vtable的代码 - 答案是响亮的NO。 两者不兼容。

为了说明上述问题,尝试使用g ++编译Crypto ++库(AES / GCM的速度提高约40%),然后将它与clang ++编译的代码连接起来。


它可能会或不会工作。 预计ABI的某些元素会相同。 例如,我相信g ++和clang都使用Itanium ABI名称修改方案。 其他元素不能。 所以这取决于你编译的代码有多复杂。

另外,我会建议为无法选择的内部函数打开一个LLVM错误。 Clang和LLVM有一个非常活跃的社区,可能有人会很快挑出错误。

链接地址: http://www.djcxy.com/p/71311.html

上一篇: Can I compile a function with gcc and then use it with clang?

下一篇: How to make two Elastic Beanstalk environments share one database instance