关于C#:从MinGW .a转换为VC .lib

Convert from MinGW .a to VC++ .lib

我有一个旧库(位于C中),只能在Windows的MinGW MSYS32上构建。由此,我可以生成一个从GNU libtool生成的.a静态库文件。我的主要开发工作是在Visual Studio 2008中完成的。如果我尝试使用MinGW生产的库并将其链接到Visual Studio中,它将抱怨缺少外部组件。这很可能是由于完成了C符号修饰,并且它与.a文件中的内容不匹配。有什么已知的方法可以将静态.a文件转换为VC库格式吗?


如果对符号的处理方式不同,则编译器使用的是不同的ABI,并且您将无法"转换"或任何已编译的库:以不同方式处理名称的原因是为了避免用户获得成功使用不同的ABI从目标文件构建可执行文件。 ABI定义了如何传递参数,如何表示虚拟功能表,如何引发异常,基本数据类型的大小以及许多其他事情。名称修改也是其中的一部分,并且经过精心选择,以使其高效并且与同一平台上的其他ABI不同。查看名称修饰是否确实不同的最简单方法是使用两个编译器仅使用基本类型来编译具有几个函数的文件,并查看符号(在UNIX上,我会使用nm;我是我不是Windows程序员,因此我不知道在那使用什么工具。

基于维基百科,MinGW似乎还使用了不同的运行时库:MinGW(libstdc)和Visual Studio(Dinkumware)使用的标准C库的布局和实现不兼容。即使两个编译器之间的ABI相同,使用的标准C库也不相同。如果ABI相同,则需要替换设置,以使一个编译器使用相应的其他编译器的标准库。使用已编译的库无法执行此操作。我不知道这是否可行。

我个人不会试图在这两个不同的编译器之间进行链接,因为它注定根本无法正常工作。相反,您需要将实现移植到通用编译器,然后从那里进行编译。


搜索def文件并运行命令,例如lib / machine:i386 /def:test.def它将生成
导入lib文件。