使用mingw使用MSVC ++ .lib文件。名字错误

时间:2012-01-23 20:15:48

标签: c++ visual-c++ mingw

我有静态C ++库,用MSVC和dll文件编译(库名为opennurbs)。我需要在项目中使用这个库,由mingw编译(我使用Qt创建者,但项目不使用qt库)。所以,我有未解决的外部因素。我认为名称错误的问题。 我怎么能把.lib文件转换成.a库? 我尝试使用nm命令,但它不起作用:“foo.dll中没有符号”。 外部“C”不起作用,因为它是C ++库。

2 个答案:

答案 0 :(得分:4)

一般来说,您将无法使用使用另一个编译器构建的C ++ DLL。名称修改只是其中一个问题 - 对于异常处理,RTTI,内存管理甚至类布局本身(尤其是多重和虚拟继承)都没有兼容性保证,仅举几个潜在的问题。

一些建议(没有一个是理想的):

  • 最好的解决方案是,如果您可以完全回避原始问题,并为您的编译器获取二进制文件或从源代码构建(即在您的情况下从MinGW构建DLL及其客户端)。
  • 如果您可以将DLL的接口公开为纯C API,请执行此操作。例如。 Win32是“C API”,适用于所有类型的编译器,而不仅仅是C / C ++。
  • 如果您想要DLL的“面向对象”API,不需要可移植性并准备投入必要的开发工作,提供COM API可能值得一看。

答案 1 :(得分:2)

很难准确理解你的问题是什么,但一个解决方案是显而易见的。 openNURBS代码可免费获得,并具有完全许可的许可。你应该简单地download并直接在mingw中编译它。

无论如何,这将是唯一可行的途径。 C ++没有标准的二进制接口,每个工具都有不同的二进制接口。这甚至可以在同一工具的不同版本之间有所不同。更重要的是,MSVC编译库将依赖于mingw编译代码中的不同C ++运行时库。

所以,最重要的是你需要你的mingw编译器编译的openNURBS。但幸运的是,这是可能的,因为库是作为源分发的。