gpt4 book ai didi

visual-c++ - LLVM 和 Visual Studio .obj 二进制不兼容

转载 作者:行者123 更新时间:2023-12-04 04:27:05 25 4
gpt4 key购买 nike

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

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

最佳答案

正如尼尔已经说过的,兼容性包括调用约定、名称修改等内容。尽管这两个是最小的问题。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com