在 Visual Studio 2010 C++/CLI 项目中使用 MinGW/GCC 构建 DLL
我有一个基于 Qt 和 Google Protocol Buffers 构建的通信库。目前它是在 Windows 上使用 MinGW/GCC 构建的。我的目标是在 .NET 上的 C# 中使用相同的库,并借助顶部使用 C++/CLI 的薄包装器(将非托管代码与托管代码桥接)。
我尝试直接在我的 C++/CLI 项目中使用 MinGW 生成的 DLL,但我不断收到链接器错误(现在不记得错误代码,但有关丢失令牌和函数/签名的信息)。
第一个问题是:我是否可以将 MinGW 生成的 DLL 与 Visual Studio 编译器/链接器一起使用?或者我是否需要再次编译库,仅对所有项目使用 VS 编译器?
如果我应该能够直接使用 MinGW 生成的 DLL,我如何在 Visual Studio 2010 中引用它?在项目设置中,它似乎在寻找 *.lib 文件,但我在 MinGW/GCC 的输出中找不到任何 .lib 文件。它确实生成 *.a 文件,但 Visual Studio 似乎不处理这种文件。
我还应该提到 Qt 和 protobuf 也是用 MinGW 编译的。但如果有必要,我当然可以重新编译 VS 2010 中的所有部分。不过,如果能节省重新编译时间就好了,因为我们的构建服务器已经有了使用 MinGW 的工作设置。
I have a communication library built on top of Qt and Google Protocol Buffers. It's currently being built with MinGW/GCC on Windows. My goal is to use the same library in C# on .NET, with the help of a thin wrapper on top using C++/CLI (bridging the unmanaged code with managed code).
I tried using the MinGW produced DLL directly in my C++/CLI project, but I keep getting linker errors (cant remember the error codes right now, but something about missing tokens and functions/signatures).
First question is: Should I be able to use the MinGW-produced DLL with the Visual Studio compiler/linker? Or do I need to compile the library again, using only VS compiler for all projects?
If I should be able to use the MinGW-produced DLL directly, how do I reference it in Visual Studio 2010? In project settings it seems to look for *.lib files, but I can't find any .lib files in the output of MinGW/GCC. It does produce *.a files, but it seems like Visual Studio don't handle this kind of file..
I should also mention that both Qt and protobuf are also compiled with MinGW. But I can of course recompile all the parts in VS 2010 if necessary.. Would have been nice to save the recompile time though, since our buildserver already has a working setup using MinGW.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最简单的使用方法是使用 Visual Studio 重新编译它。这是我假设您打算使用的接口中使用的 C++ 类型和类的情况。
如果您有该库的 C 接口,您可以通过 LoadLibrary 动态加载该库并使用 GetProcAddress 来访问这些函数。
然而,这完全取决于您打算如何使用该库的方式。
The easiest way to use it would be by recompiling it with Visual Studio. This is when I am assuming C++ types and classes used in the interface you intend to use.
In case you have a C interface to this library you could dynamically load the library via LoadLibrary and use GetProcAddress to access those functions.
However it depends completly on the way how you intend to use the library.