将 MSVC++ .lib 文件与 mingw 一起使用。名称修改

fla*_*ngo 5 c++ mingw visual-c++

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

Bra*_*vic 5

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

一些建议(都不理想):

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