将 Visual C 链接到 MinGW 的静态库
如何将 Visual C++ (2010) 控制台应用程序与 MinGW
创建的 STATIC 库(*.a
格式)链接起来?它与 Visual C++ 2010 兼容吗?
谢谢。
How can one link Visual C++ (2010) console app with a STATIC library created by MinGW
(*.a
format)? Is it compatible with Visual C++ 2010?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它不兼容。
但是,如果您从库中提取所有目标文件(使用 ar ),VC++ 链接器就能够处理这些文件(我测试了它,尽管我使用 cygwin gcc 而不是 mingw gcc)。请注意,如果您不使用
extern "C"
,您可能仍然会遇到名称修改问题。当然,您可以使用VC++的
LIB.EXE
工具将它们制作成VC++格式的静态库。正如 @Michael 指出的,如果您尝试在使用不同编译器构建的模块之间传递非 POD C++ 对象,那么您肯定会遇到问题。对此的修复与 DLL 情况相同:编写一个使用相同编译器(在本例中为 mingw)构建的包装器,该包装器公开可从其他工具链使用的 C 兼容接口。
It's not compatible.
However, if you extract all the object files from the library (use
ar
), the VC++ linker is able to deal with those (I tested it, although I used cygwin gcc rather than mingw gcc). Note that you may still have name mangling problems if you don't useextern "C"
.You may of course use VC++'s
LIB.EXE
tool to make these into a static library in VC++ format.As @Michael points out, you will definitely have problems if you try to pass non-POD C++ objects between modules built with different compilers. The fix for this is the same as the DLL case: write a wrapper built with the same compiler (in this case mingw) that exposes a C-compatible interface usable from other toolchains.