MinGW 和 MSVC
在 Winodws 上编译通常会用到这两种工具链
MinGW(Minimalist GNU for Windows) 通常用于跨平台开发,可以编译出在 Windows 系统上运行的 .exe 程序
MSVC(Microsoft Visual C++) 是专属于 Windows 软件开发,不能跨平台
它们有以下区别:
编译器:
- MinGW 使用GNU编译器集合(GCC)的变体,它是一个开源的编译器工具链,支持多种编程语言。MinGW 的编译器通常被称为 GCC 或 G++。
- MSVC 使用 Microsoft 的专有编译器,该编译器是 Visual Studio 集成开发环境(IDE)的一部分,通常称为 cl.exe。
标准库:
- MinGW 通常使用 GNU 的标准 C 库(glibc)或 MinGW-w64 中的 C 运行时库。它还可以使用 MinGW 专用的头文件和库,以便在 Windows 上开发。
- MSVC 使用 Microsoft 的 C 运行时库(CRT),这意味着它具有与 Windows API 更好的集成,但在一些情况下可能不够跨平台。
开发环境:
- MinGW 通常以类 Unix 的方式工作,可以使用命令行或与其他开发工具集成,通常是在 MSYS2 上开发
- MSVC 通常与 Visual Studio IDE 一起使用,提供了一种集成的开发环境,具有丰富的图形用户界面和调试工具。
在编译产物上,它们都可以编译出 .exe 可执行程序,但是 MinGW 通常是依赖于 dll 动态库,因为静态库是 .a 文件,所以会在编译时将静态库链接到 exe 文件里,故 MinGW 编译出的 exe 文件通常比较大
而 MSVC 可以依赖 dll 动态库以及 lib 静态库,这就让编译出的 exe 文件可以比较小
下面是库依赖上的区别:
库文件格式:
- MinGW 使用的是 GNU 工具链,因此它通常使用与 GNU 标准库兼容的库文件格式。这些库文件具有以
.a
为扩展名的静态库和以.dll
为扩展名的动态链接库。 - MSVC 使用 Microsoft 的 C/C++ 标准库格式,这些库文件通常以
.lib
为扩展名,但也可以包含.dll
动态链接库文件。
- MinGW 使用的是 GNU 工具链,因此它通常使用与 GNU 标准库兼容的库文件格式。这些库文件具有以
库的兼容性:
- MinGW 生成的库文件通常与 MSVC 生成的库文件不兼容。这意味着你不能将 MinGW 生成的对象文件与 MSVC 生成的库文件链接,反之亦然。
- 如果你使用 MinGW 编译你的应用程序,你需要确保你使用的库是专门为 MinGW 编译的,或者在构建库时采用兼容的编译选项。
- 同样,如果你使用 MSVC 编译,你需要使用与 MSVC 兼容的库文件。
第三方库支持:
- 一些第三方库可能会提供适用于 MinGW 和 MSVC 的不同版本。在选择库时,你需要确保选择与你的编译器兼容的版本。
- 有些库可能提供了 CMake 或其他构建工具的支持,这些工具可以帮助你在不同的编译器下进行构建。
MinGW 和 MSVC的更多相关文章
- windows下使用mingw和msvc静态编译Qt5.15.xx
windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...
- MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题
今天遇到一个奇怪的问题. 开发环境: 1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库 2. Visual Studio 2008 问题描述: 在 eclipse cdt 中 ...
- MingW和MSVC默认的编码方式不一样
同一份源代码,源文件编码格式为UTF-8: string tmp = "我"; ;i<tmp.size();++i) { printf("%0x ",tm ...
- MinGW 与MSVC的区别
Qt 中有两种方式编译,一种是MinGW ,另一种MSVC. 其中:MSVC是指微软的VC编译器 MingGW是指是Minimalist GNU on Windows的缩写.它是一个可自由使用和自由发 ...
- MSVC and MinGW DLLs
Posted February 26th, 2009 by earnie dll faq msvc TODO: Reformat to new wiki syntax. !!! [Minimalist ...
- 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 ...
- QtCreator MSVC 搭建 Debugger
QtCreatorForWindows搭建Debugger QtCreator for windows选择mingw或者msvc: qt-opensource-windows-x86-msvc2015 ...
- 关于Qt
什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...
- 【Qt】关于Qt【转】
什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...
- OpenCV与Qt的环境搭建及Demo
前言: 前段时间写了很多OpenCV的程序,虽然重点在算法上,但图像窗口只能靠cvNamedWindow,效果很不理想.遂希望用Qt配合OpenCV使用,为我的程序建立图形化界面.然而,依我对Open ...
随机推荐
- [转帖]configure: error: cannot guess build type;you must specify one
该问题一般出现在国产平台,从错误描述来看,意思是:无法猜测build类型,你必须指定一个. 解决办法: 1. 在系统/usr路径下搜索 config.guess 和 config.sub 这两个文件. ...
- [转帖]jvm学习三-MAT内存分析工具的使用
目录 1 模拟内存溢出程序 1.1 jvm配置 1.2 测试代码 2 MAT工具进行内存分析 2.1 大纲介绍 2.2 Histogram视图介绍 2.3 Leak Suspects视图介绍 2.4 ...
- [转帖] Linux查看日志文件写入速度的4种方法
https://www.cnblogs.com/codelogs/p/16365448.html 简介# 有时,我们需要查看某个文件的增长速度,如日志文件,以此来感受系统的负载情况,因为一般情况下,日 ...
- 国产飞腾2000+服务器 存储单盘性能简单验证 SSD 与 HDD
有kylinV10的源 可以直接安装fio yum install fio -y 第一步, 将sdd 进行初始化,并且设置文件系统 fdisk /dev/sdbmkdir /ssd2 mkfs.ext ...
- 5.1 C++ STL 集合数据容器
Set/Multiset 集合使用的是红黑树的平衡二叉检索树的数据结构,来组织泛化的元素数据,通常来说红黑树根节点每次只能衍生出两个子节点,左面的节点是小于根节点的数据集合,右面的节点是大于根节点的集 ...
- 6.0 Python 使用函数装饰器
装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator),装饰器的功能非常强大,装饰器一般接受一个函数对象 ...
- 基于volcano实现节点真实负载感知调度
本文分享自华为云社区<基于volcano实现节点真实负载感知调度>,作者: 可以交个朋友. 背景 默认调度器调度器视某个节点的空闲可调度资源=节点可分配资源 - SUM(节点上已调度Pod ...
- 遥感图像处理笔记之【Machine Learning CS-433 - Class Project 2 - Road Segmentation - EPFL】
遥感图像处理学习(8) 前言 遥感系列第8篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2024年1月2日 本文再编辑于2024年1月4日:附作者改进U-Net网络图片:文字补充说明 20 ...
- 安装kali linux操作系统(转) - 初学者系列 - 学习者系列文章
前段时间想到操作系统安全问题,所以对操作系统的防火墙和安全软件都进行了安装.然后,涉及到Linux系统的安全测试问题,所以找到了Linux系统里的安全测试的版本Kali Linux系统.本文仅对该系统 ...
- HarmonyOS 实战小项目开发(一)
HarmonyOS 实战小项目开发(一) 日常逼逼叨 在经过一周多的Harmonyos 开发基础知识的学习后,自己通过对于Harmonyos基础知识的学习之后,结合自己的一些想法,独自完成了利用Ark ...