繁体   English   中英

使用 MinGW 编译的库可以与 MSVC 一起使用吗?

[英]Do libraries compiled with MinGW work with MSVC?

问题:
我会在 Visual Studio 项目中使用 MinGW 库。

我的系统是如何构建的:

我为我的 Windows 10 系统下载了 ZBar 库(zbar-0.23.91-win_x86_64-DShow.zip
这是链接: https://linuxtv.org/downloads/zbar/binaries/ )。

我在 lib 和 bin 的文件夹中有这些文件:

  • libzbar.a
  • libzbar.dll.a
  • libzbar.la
  • libzbar-0.dll

构建时出错:
错误 LNK2019:在 snprintf 中引用的未解析的外部符号 __mingw_vsnprintf

我的问题
使用 MinGW 编译的库可以与 MSVC 一起使用吗?

此错误消息很容易在 Google 中搜索。 将 -lmingwex 添加到 linker 标志,所需的库是来自 MinGW 发行版的 libmingwex.a。

问题是这些库是用 mingw 编译的,而我需要在 mscv 项目中编译它们。

解决方案是使用 Visual Studio 重建库。

可以毫无问题地使用一切。

您可以使用 C-lion,因为它直接支持 MinGW。 此链接中提供了有关如何将 select MinGW 作为 C-lion 中的工具链的示例教程。

https://www.jetbrains.com/help/clion/how-to-create-toolchain-in-clion.html#custom-targets-toolchain

在此处输入图像描述

使用它,您将可以直接访问所有可用于 MinGW 的库。

不,它不能。 使用 MinGW 编译的库仅适用于 MinGW。 您需要使用 MSVC 从源代码编译它。
我没有使用过 windows 并且几乎没有使用过 Visual Studio。 但是如果你愿意,你可以在 Visual Studio ide 上使用 MinGW。
将 MinGW 与 Visual Studio IDE 一起使用

不,在 MinGW 上编译的库不能与 MSVC 一起使用。 主要原因是:

  • 缺乏 ABI 兼容性。 也就是说,在二进制中,事物的布局方式因编译器而异。
  • 标准库实现方式的差异。 标准库可以通过多种方式实现。 C++ 标准只是说明函数的行为方式,并不强制编译器开发人员以相同的方式实现它们。

一般来说,用一个编译器编译的东西与另一个编译器不兼容。

您不能在两个不同的编译器上编译相同的源代码。 库 function 定义不同,因此在编译过程中可能会出错。

解决方案是检查哪些预定义函数在 MVSC 中不起作用,然后使用 MVSC 库创建用户定义的 function。

例如

conio.h中定义的clrscr()不适用于 clang 编译器,您可以创建预定义的 function 或使用system()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM