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 ...
随机推荐
- [转帖]TIDB - 使用BR工具进行数据热备份与恢复
一.BR工具 BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复.BR 只支持在 TiDB v3.1 及以上版本 ...
- [转帖]TiUP 常见运维操作
https://docs.pingcap.com/zh/tidb/stable/maintain-tidb-using-tiup 本文介绍了使用 TiUP 运维 TiDB 集群的常见操作,包括查看集群 ...
- [转帖]Nginx reuseport 导致偶发性卡顿
https://github.com/jonmeredith/tcpperf https://plantegg.github.io/2023/06/08/Nginx%20reuseport%20%E5 ...
- [转帖] 拒绝蛮力,高效查看Linux日志文件!
https://www.cnblogs.com/codelogs/p/16410363.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 日常分析问题时 ...
- [转帖]Centos7 nginx访问日志文件割接
一.yum安装nginx 二.各文件路径( /etc/nginx/nginx.conf) 1.访问日志路径:access_log /var/log/nginx/access.log main; 2.p ...
- [转帖]A17再次证明苹果才是王者,组装芯片的安卓手机给它提鞋都不配
http://news.sohu.com/a/653472711_121124371 在挤了两代牙膏之后,苹果终于拿出了性能大幅提升的A17处理器,外媒传出A17处理器的性能提升幅度至少超过四成,相比 ...
- [转帖]如何理解 iowait
Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义.相关的统计数据.原理以及 iowait的瓶 ...
- MySQL控制权限
编写顺序和执行顺序是不一样的 编写顺序: SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 ...
- 学习MySQL中DDL语句的修改字段与删除字段,删除表
连接本地mysql语句 mysql -hlocalhost -uroot -proot 显示表结构 语法:desc 表名 查看某一个表结构以及注释 语法:show create table 表名 sh ...
- Promise练习文件读取
1. fs读取文件 const fs=require('fs');//引入文件读取模块 fs.readFile('./README.md',(err,data)=>{ // 如果出现错误,抛出错 ...