使用mingw和msys将VC ++库转换为mingw库?

时间:2011-11-27 07:28:18

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

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

2 个答案:

答案 0 :(得分:2)

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

简短回答:不是真的。

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

答案 1 :(得分:1)

C接口

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

C ++接口

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

¹ABI

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