从MinGW静态库(.a)转换为Visual Studio静态库(.lib)

49

我想要在C++应用程序中使用xlsLib创建Excel电子表格。

问题是,编译xlsLib时,我得到了一个.a文件(由MinGW生成的GCC静态库)。但是,我的应用程序依赖于另一个API(PhysX),只能用Visual Studio进行编译。

因此:是否可能将GCC静态库(xlslib.a)转换为Visual Studio静态库文件(xlslib.lib)?

4个回答

38
使用MinGW生成的静态库文档通常与Visual C++编译器/链接器兼容。因此,您应该能够通过在Visual Studio项目属性中将.a文件添加到链接器输入中直接使用它们:
  1. 转到项目“属性”(Alt-F7)。
  2. 在左框中打开“配置属性-> 链接器-> 输入”
  3. 添加您需要使用的所有.a存档列表
  4. 您可能还需要添加MinGW的libgcc.a
此外,可能会出现混合C运行时库的问题C/C++属性->代码生成->运行时库,但这取决于您在MinGW中使用的构建配置。有时需要连接到MinGW的libmsvcrt.a,但在许多情况下,它会导致问题。
最后,这种混合的MinGW和Visual C ++链接通常适用于C模块,但据我所知,对于C ++而言却不起作用。

但是使用 .a 文件会导致我的 .exe 无法进行调试,提示“找不到调试信息”。 - onmyway133
3
请检查调试符号是否仍然存在。您可以使用例如 nm --debug-syms 命令,如果二进制文件已经剥离,则会显示“no symbols”。 - Hi-Angel
1
添加libgcc.a对我来说非常重要。 - meolic
你说我可以使用 MinGW64 生成静态库,并将其作为资源在 MSVC 项目中使用? - Royi

4
但是使用 .a 会导致我的 .exe 无法进行调试,出现“找不到调试信息”的错误。这是因为 .a 库不包含用于调试的调试信息。如果您想要调试它,需要在编译时告诉编译器添加调试信息。对于 Mingw,您需要在运行“make”时将“-g”添加到 CFLAGS 中,例如“make CFLAGS='-g'”。

0

-1
据我所知,它们是同一件事。Visual Studio的.lib文件也是包含目标文件的ar归档文件。你试过只是重命名文件吗? :)

7
不,情况并不是那么简单,实际档案的格式稍有不同。 - laura
我相信Visual Studio也附带了一个名为lib.exe的工具。使用.def文件,您可以将.a转换为.lib。 - jiggunjer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接