【问题标题】:Using mingw and msys to convert VC++ libraries into mingw libraries? [closed]使用 mingw 和 msys 将 VC++ 库转换为 mingw 库? [关闭]
【发布时间】:2011-11-27 07:28:18
【问题描述】:

是否有关于如何通过 MinGW 工具链转换/使用 VC++ 库的指南?

【问题讨论】:

  • 只是为了澄清:您提供的链接似乎回答了“如何为 MinGW 编译 freeglut”。您的问题仅仅是“如何将 vc++ 库转换为 MinGW 库?”。也就是说,整个 OpenGL/Freeglut 场景只是一个例子而不是问题的一部分吗?
  • 是的,只是一个例子。对不起,我应该更清楚。

标签: c++ visual-c++ interop mingw


【解决方案1】:

看起来 MinGW 的人有一个FAQ page about this

简短的回答:不是真的。

长答案:对于 DLL,也许吧。

【讨论】:

    【解决方案2】:

    C 接口

    如果库二进制接口仅作为 C 接口公开,并且作为 .dll 提供,则您可以在 mingw 编译的程序中使用 VC 库而无需任何转换(我不知道 VC 是否为 .lib 文件与mingw工具链兼容)。

    C++ 接口

    如果没有 C 级接口,则需要库的源代码,因为必须使用 g++ 编译库。原因是 g++ 和 VC 之间没有共同的 ABI¹。

    ¹ABI

    ABI(应用程序二进制接口)定义了 C++ 的技术底层细节。它处理名称如何被破坏、函数如何被调用、异常系统如何工作以及许多其他事情。 ABI 不是由 C++ 标准定义的,因此(几乎)每个编译器供应商都创建了自己的。这些 ABI 不可互换,因此您不能混合由不同编译器生成的二进制文件(.o/.obj 和 .a/.lib 文件)。事实上,情况更糟,你甚至不能可靠地交换由一个编译器的不同版本创建的二进制文件,或者用相同的编译器创建的二进制文件,但编译器选项不同(比如一个二进制文件有,另一个没有异常处理)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多