在 Winodws 上编译通常会用到这两种工具链

MinGW(Minimalist GNU for Windows) 通常用于跨平台开发,可以编译出在 Windows 系统上运行的 .exe 程序

MSVC(Microsoft Visual C++) 是专属于 Windows 软件开发,不能跨平台

它们有以下区别:

  1. 编译器:

    • MinGW 使用GNU编译器集合(GCC)的变体,它是一个开源的编译器工具链,支持多种编程语言。MinGW 的编译器通常被称为 GCC 或 G++。
    • MSVC 使用 Microsoft 的专有编译器,该编译器是 Visual Studio 集成开发环境(IDE)的一部分,通常称为 cl.exe。
  2. 标准库:

    • MinGW 通常使用 GNU 的标准 C 库(glibc)或 MinGW-w64 中的 C 运行时库。它还可以使用 MinGW 专用的头文件和库,以便在 Windows 上开发。
    • MSVC 使用 Microsoft 的 C 运行时库(CRT),这意味着它具有与 Windows API 更好的集成,但在一些情况下可能不够跨平台。
  3. 开发环境:

    • MinGW 通常以类 Unix 的方式工作,可以使用命令行或与其他开发工具集成,通常是在 MSYS2 上开发
    • MSVC 通常与 Visual Studio IDE 一起使用,提供了一种集成的开发环境,具有丰富的图形用户界面和调试工具。

在编译产物上,它们都可以编译出 .exe 可执行程序,但是 MinGW 通常是依赖于 dll 动态库,因为静态库是 .a 文件,所以会在编译时将静态库链接到 exe 文件里,故 MinGW 编译出的 exe 文件通常比较大

而 MSVC 可以依赖 dll 动态库以及 lib 静态库,这就让编译出的 exe 文件可以比较小

下面是库依赖上的区别:

  1. 库文件格式:

    • MinGW 使用的是 GNU 工具链,因此它通常使用与 GNU 标准库兼容的库文件格式。这些库文件具有以  .a  为扩展名的静态库和以 .dll 为扩展名的动态链接库。
    • MSVC 使用 Microsoft 的 C/C++ 标准库格式,这些库文件通常以  .lib 为扩展名,但也可以包含 .dll 动态链接库文件。
  2. 库的兼容性:

    • MinGW 生成的库文件通常与 MSVC 生成的库文件不兼容。这意味着你不能将 MinGW 生成的对象文件与 MSVC 生成的库文件链接,反之亦然。
    • 如果你使用 MinGW 编译你的应用程序,你需要确保你使用的库是专门为 MinGW 编译的,或者在构建库时采用兼容的编译选项。
    • 同样,如果你使用 MSVC 编译,你需要使用与 MSVC 兼容的库文件。
  3. 第三方库支持:

    • 一些第三方库可能会提供适用于 MinGW 和 MSVC 的不同版本。在选择库时,你需要确保选择与你的编译器兼容的版本。
    • 有些库可能提供了 CMake 或其他构建工具的支持,这些工具可以帮助你在不同的编译器下进行构建。

MinGW 和 MSVC的更多相关文章

  1. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  2. MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题

    今天遇到一个奇怪的问题. 开发环境: 1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库 2. Visual Studio 2008 问题描述: 在 eclipse cdt 中 ...

  3. MingW和MSVC默认的编码方式不一样

    同一份源代码,源文件编码格式为UTF-8: string tmp = "我"; ;i<tmp.size();++i) { printf("%0x ",tm ...

  4. MinGW 与MSVC的区别

    Qt 中有两种方式编译,一种是MinGW ,另一种MSVC. 其中:MSVC是指微软的VC编译器 MingGW是指是Minimalist GNU on Windows的缩写.它是一个可自由使用和自由发 ...

  5. MSVC and MinGW DLLs

    Posted February 26th, 2009 by earnie dll faq msvc TODO: Reformat to new wiki syntax. !!! [Minimalist ...

  6. mingw qt(可以去掉mingwm10.dll、libgcc_s_dw2-1.dll、libstdc++-6.dll的依赖,mingw默认都是动态链接gcc的库而TDM是静态链接gcc库,tdm版本更好用。用aspack压缩没有问题。qt本身不使用异常处理)good

    原文地址:mingw qt作者:孙1东 不使用Qt SDK,使用mingw编译qt源代码所遇问题及解决方法: configure -fast -release -no-exceptions -no-r ...

  7. QtCreator MSVC 搭建 Debugger

    QtCreatorForWindows搭建Debugger QtCreator for windows选择mingw或者msvc: qt-opensource-windows-x86-msvc2015 ...

  8. 关于Qt

    什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...

  9. 【Qt】关于Qt【转】

    什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...

  10. OpenCV与Qt的环境搭建及Demo

    前言: 前段时间写了很多OpenCV的程序,虽然重点在算法上,但图像窗口只能靠cvNamedWindow,效果很不理想.遂希望用Qt配合OpenCV使用,为我的程序建立图形化界面.然而,依我对Open ...

随机推荐

  1. [转帖]python print如何格式化输出变量长度固定某个长度

    https://zhuanlan.zhihu.com/p/595778735 在 Python 中,可以使用格式化字符串的方法来格式化输出变量. 例如,要将一个字符串变量 s 输出为 10 个字符长度 ...

  2. 部分MySQL的SQL信息整理

    模块补丁信息查看 select su as 补丁模块, count(1) as 数量 from gsppatchlog where TO_DAYS( NOW( ) ) - TO_DAYS(deploy ...

  3. [转帖]Prometheus系列之Grafana 版本9.0.0 设置Email邮件报警实战

    目录 1. 配置文件conf/defaults.ini修改 2. Grafana Web页面配置报警邮箱接收者 3. 创建Dashboard 4. 创建Alert的文件夹 5. 设置Notificat ...

  4. [转帖]tidb-lightning 逻辑模式导入

    https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-configuration 本文档介绍如何编写逻辑导入模式的配置文件,如何进行性能调优等内 ...

  5. [转帖]shell脚本之awk命令——按列求平均值、最大值、最小值

    文章目录 写在前面 awk求平均值 awk求最大值 awk求最小值 awk求极值.均值的实际应用 写在前面 awk命令求极值和均值需要熟悉该命令的基本用法,如果你不熟悉该命令,请先阅读shell脚本之 ...

  6. [转帖]gcc与makefile常用操作(绝对常用,也绝对够用)

    makefile与gcc常用操作 一.温故知新 1.可执行程序的生成过程 2.gcc的常用操作 二.make操作 三.编写Makefile文件时常用操作 注意:在Makefile文件中 空格和缩进是完 ...

  7. 【实践篇】最全的【DDD领域建模】小白学习手册(文末附资料)

    导读 DDD领域建模被各个大小厂商提起并应用,而每个人都有自己的理解,本文就是针对小白,系统地讲解DDD到底是什么,解决了什么问题,及一些建议和实践.本文主要是思想的一种碰撞和分享,希望能对朋友们有所 ...

  8. 【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令的 c 代码

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一开始是使用 golang 中的 cgo 来编译: env ...

  9. 【JS 逆向百例】Fiddler 插件 Hook 实战,某创帮登录逆向

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...

  10. navicat连接远程docker中的mysql报错解决

    总是报错 填写主机地址有错误,终于找到方法,是因为docker中的mysql没有设置ip地址,navicat不识别,奉上 https://blog.csdn.net/qq_42838723/artic ...