LLVM和visual studio .obj二进制不兼容

And*_*dos 5 llvm clang visual-c++

有谁知道是否计划为visual studio组合.obj和静态.lib文件的LLVM二进制兼容性?现在我只能将LLVM制作的.obj文件与动态库链接起来,这些动态库在运行时加载DLL(从visual studio编译).

虽然两个编译器之间可能发生二进制兼容性的可能性很小,但是有人知道为什么在一个平台的编译器之间实现这一点很困难吗?

Ant*_*kov 8

正如Neil所说,兼容性包括调用约定,名称修改等等.虽然这两个是最小的可能问题.LLVM已经知道所有特定于Windows的调用约定(stdcall,fastcall,thiscall),这就是你可以从.dll调用东西的原因.

如果我们谈论C++代码,那么主要的问题是C++ ABI:vtable布局,rtti实现等.clang跟随Itanium C++ ABI(例如gcc使用它),VCPP - 没有,所有这些都没有记录,不幸.在这个方向上有一些工作正在进行,所以东西可能会开始显而易见.请注意,很可能永远不会覆盖某些部分,例如win32上基于seh的异常处理,因为它已获得专利.

与纯C代码链接工作了很长时间,因此,您可以通过C存根/包装器解决这些与C++ ABI相关的问题.