我可以编译与海湾合作委员会的功能,然后用铿锵使用它呢?(Can I compile a functi

2019-09-01 21:24发布

我试图使用SSE4.2内在铿锵/ LLVM,但它不是编译,因为我得到cannot select intrinsic的LLVM错误。 在另一方面,相同的代码编译完美的海湾合作委员会。 所以我想,也许我可以编译用gcc该功能,以便有一个对象或库文件,然后调用库函数在我的代码,这是由铛/ LLVM编译。 将这项工作?

Answer 1:

这是可能的编译GCC的对象文件在Linux中,并将其转换在Visual Studio中工作。 我在虚拟盒这样做是最近运行Linux在Windows 转换-C-对象文件从Linux的邻到Windows的OBJ所以这应该是可能的锵在Linux或Windows为好。

这样不仅可以这样做交叉编译器是可以做到跨平台

你需要得到调用约定,并在目标文件格式正确(和C ++的名字改编为好)。 随着GCC编译时,你可以告诉它调用约定/ API与使用mabi 。 然后,如果从Linux的去的Windows,你需要一个目标文件转换器从如ELF转换Linux上COFF在Windows上。 当然,也有情况下,这可能会无法正常工作(例如,如果模块依赖于一个系统调用,这只是在一个平台)。 见上面的链接了解详情。



Answer 2:

对于任何更多或较不复杂的C ++代码,例如,一个编译为V表 - 的答案是响亮的NO。 这两个是不兼容的。

为了说明上述观点,尝试编译加密+相克库++(约40%的加速为AES / GCM收益),然后链接你的铛++ -它编译的代码。



Answer 3:

它可能会或可能无法正常工作。 在ABI的一些元素可以预期相同。 例如,相信无论是g ++以及铛使用安腾ABI名称重整方案。 其他元素不能。 因此,它取决于你编译代码的复杂程度。

另外,我建议打开一个LLVM的错误为无法选择的内在。 锵和LLVM有一个非常活跃的社区,并有可能有人会挑错误很快适应。



文章来源: Can I compile a function with gcc and then use it with clang?
标签: c gcc llvm clang