从 MinGW 静态库 (.a) 到 Visual Studio 静态库 (.lib)
Posted
技术标签:
【中文标题】从 MinGW 静态库 (.a) 到 Visual Studio 静态库 (.lib)【英文标题】:From MinGW static library (.a) to Visual Studio static library (.lib) 【发布时间】:2011-01-06 23:30:55 【问题描述】:我正在尝试使用 xlsLib 从 C++ 应用程序创建 Excel 电子表格。
麻烦的是编译xlsLib,我给了一个.a文件(一个GCC静态库,由MinGW生成)。但是,我的应用程序依赖于另一个只能使用 Visual Studio 编译的 API (PhysX
)。
因此:是否可以将 GCC 静态库 (xlslib.a
) 转换为 Visual Studio 静态库文件 (xlslib.lib
)?
【问题讨论】:
【参考方案1】:使用 MinGW 生成的静态库存档通常与 Visual C++ 编译器/链接器兼容。因此,您应该能够通过将 .a
文件添加到 Visual Studio 中项目属性中的链接器输入来直接使用它们:
-
转到项目
Properties
(Alt-F7)。
在左侧框,打开Configuration Properties->Linker->Input
添加您需要使用的所有.a
档案的列表
您可能还需要添加 MinGW 的 libgcc.a
库
此外,混合 C 运行时库properties of C/C++->Code Generation->Runtime Library
可能会出现问题,但这取决于您与 MinGW 一起使用的构建配置。有时需要链接到来自 MinGW 的 libmsvcrt.a
,但在许多(如果不是大多数)情况下,它会导致问题。
最后,据我所知,这种混合的 MinGW 和 Visual C++ 链接通常适用于 C 模块,但不适用于 C++。
【讨论】:
但是使用.a会导致我的.exe无法调试“找不到调试信息”。 @onmyway133 检查调试符号是否仍然存在。您可以使用例如nm --debug-syms
,如果二进制文件被剥离,它会说“没有符号”。
添加 libgcc.a 对我来说很重要
您说我可以使用MinGW64
生成静态库并将其用作MSVC 项目中的资源?【参考方案2】:
但使用 .a 会导致我的 .exe 无法调试“找不到调试信息”。 – 熵 5 月 22 日 12:27
这是因为 .a 库不包含调试所需的调试信息。如果你想调试它,你需要告诉编译器在编译时添加调试信息。对于mingw,您需要在运行“make
”时将“-g
”添加到CFLAGS,例如“make CFLAGS="-g"
”
【讨论】:
【参考方案3】:以下是我发现有用的两个资源:
[截图,错误链接]
http://old.nabble.com/using-VC%2B%2B-.lib-with-mingw-td23151303.html
编辑。我找不到我要找的链接。同时,看看这个:http://www.willus.com/mingw/yongweiwu_stdcall.html
【讨论】:
【参考方案4】:据我所知,它们是一回事。 Visual Studio 的.lib
文件也是包含目标文件的ar
档案。您是否尝试仅重命名文件? :)
【讨论】:
不,没那么简单,实际存档的格式略有不同。 相信Visual Studio自带的工具lib.exe也是有的。使用 .def 文件,您可以将 .a 转换为 .lib。以上是关于从 MinGW 静态库 (.a) 到 Visual Studio 静态库 (.lib)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MinGW 在 Linux 上构建 Crypto++ 库?