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

标签 c++ visual-c++ mingw

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

最佳答案

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

一些建议(都不理想):

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

关于c++ - 将 MSVC++ .lib 文件与 mingw 一起使用。名称修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977971/

相关文章:

android - SDL 下 Android OpenGL ES 渲染中不确定的不需要的额外三角形

c++ - 查找集合的方法

c++ - Qt GUI 如何将这些标签放入数组中

c++ - 如果使用 unsigned,为什么重载会导致调用不明确?

c++ - 可能的内存泄漏?

c++ - 我在 SFML sf::RenderWindow 中只有黑屏

c++ - 算术运算符(+)运算符是否会检查返回类型和传递参数?

c++ - Flag 检查编译器是 gcc/mingw 还是 VC++ cl?

c++ - 使用 C++ 合并静态库时出现 undefined reference 错误

linux - 在 linux 上使用 mingw 与 clang 交叉编译