有谁知道针对Visual Studio编译的.obj和静态.lib文件是否计划LLVM二进制兼容性?
现在,我只能将LLVM制成的.obj文件与动态库链接,该动态库会在运行时加载DLL(从Visual Studio编译)。

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

最佳答案

正如Neil所说的那样,兼容性包括调用约定,名称修饰等,尽管这两个是最小的问题。 LLVM已经知道所有特定于Windows的调用约定(stdcall,fastcall,thiscall),这就是为什么您可以从.dll调用内容的原因。

如果我们讲的是C++代码,那么主要问题就是C++ ABI:vtable布局,rtti实现等。clang遵循Itanium C++ ABI(例如gcc等),VCPP-否,并且所有这些都未记录在案,很遗憾。在这个方向上有一些工作正在进行,所以东西可能显然开始起作用。请注意,很可能某些部分将永远不会被覆盖,例如Win32上基于seh的异常处理,因为它已获得专利。

与纯C代码的链接使用了很长时间,因此,您可以通过C stub /包装程序解决与C++ ABI相关的问题。

关于visual-c++ - LLVM和Visual Studio .obj二进制不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6329688/

10-11 22:59
查看更多