MinGW 也许真的不是真的 YYDS

MinGW是Minimalist GNU for Windows的缩写,它提供了一组在Windows上生成本地Windows程序所需的头文件和导入库,允许使用GCC而无需第三方C运行时库。与Cygwin不同,MinGW更简洁且性能更好,不提供完整的POSIX API,而是直接调用Windows API。安装MinGW可以通过下载mingw-get-setup.exe进行,之后可以选择添加如GMP、MPFR等扩展库。MinGW-W64支持x86和x86_64架构。推荐x86使用DWARF,x86_64使用SEH作为异常处理机制。

献给那些喜欢在windows 上使用 GNU的小伙伴们吧,浅谈浅谈哈

 ** 百度百科

         MinGW是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

 ** 发展历史

1995年Cygnus的一位工程师Steve Chamberlain,观察到GNU的工具链已经支持x86和COFF的目标文件,而且还提供了可移植到任意平台的C标准库newlib,与那时的windows系统使用相同的目标文件,那么理论上只要将GCC重定向,并作为一个 cross-compiler,那么GCC 编译器就可以生成 Windows平台下的可执行文件, Steve开发出原型, 命名为Cygwin。 有了Cygwin 就可以使用GCC 生成windows 平台的程序了,于是为了 GCC用起来更舒服,Steve 尝试在 windows下构建 Shell 脚本运行环境,即是需要一个与bourne shell 兼容的命令解释器[Bash],因此需要一个 fork系统实现程序的调用和标准输入输出,windows 包含的类似接口和 posix不兼容,于是 cygwin就需要一套与 posix兼容的编程接口,从而提供了一套抽象层dll,最典型的cygwin1.dll。截至至此都是 Steve 一个人完成的,后来到了1996年,其他工程师也加入了进来。随着 Linux 系统发展壮大,Cygwin 已经不仅仅提供 POSIX 兼容,因此也顺带多了更多模拟层的依赖关系,一方面它的模拟层实现了相当良好的 Posix 兼容,一方面使得Cygwin越来越庞大,使得 Cygwin更像是一个基于 Posix在windows 下实现了一个 unix-like环境。

1998年 Colin Peters 创建了一个开源项目并撰写了最初的版本, 命名为 mingw32 (Minimalist GNU for W32), 后来为了避免暗示它仅限于生成32位二进制文件, 后面的 32 被去除,从而变成了MinGW。

Colin Peters首先为MSVCRT.DLL(Microsoft Visual C Runtime )库提供了一组头文件和一个导入库, 不过这些代码需要依赖和使用Cygwin的某些接口。

之后的 Jan-Jaap van der Heijden希望不再依赖于Cygwin库,而是仅仅使用本机的构建环境来构建应用程序,所以Jan-Jaap着手开发了binutils、GCC和make,并生成了第一个无需使用Cygwin即可生成本机代码的编译器、汇编器和链接器工具。Mumit Khan 后来接手了开发工作,向程序包添加了更多Windows特定的功能,包括Anders Norlander的Windows系统标头。

2000年,该项目移至SourceForge,以寻求社区的更多帮助并集中开发。 在 SourceForge 上得到了更多开源人士的帮助, MinGW也得到很大的发展,甚至2005年9月MinGW被选为SourceForge的月度最佳项目。不过在与SourceForge对其邮件列表的管理存在分歧之后,2018年,MinGW迁移到OSDN。

相对于Cygwin,它首要特点就是简单性和性能好,因此,它不提供某些不能使用Windows API轻松实现的POSIX API,基于MinGW的程序是通过直接调用Windows API编译的。

  

** 安装方法

1. 在下安装 mingw-get-setup.exe 

 MinGW官方网址:http://www.mingw.org/


2. 下载与本地系统对应的离线包

 

sourceforge --  https://sourceforge.net/projects/mingw

** 关于一些细节的区分


1. MinGW 与 MinGW-W64
   mingw 只支持 x86, MinGW-W64 architecture 版本分为 x86_64 和 x86 版本
2. posix 与 win32
   Threads 由于在Windows NT家族内核和许多Unix内核中,线程管理和调度之间存在巨大差异,     Win32 使用实际的系统调用来处理线程,而 posix使用 pthreads,总之推荐使用 posix。
3. sjlj, dwarf and seh

sjlj (setjmp/longjmp):
available for 32 bit and 64 bit
not "zero-cost": even if an exception isn't thrown, it incurs a minor performance penalty (~15% in exception heavy code) but sometimes the penalty can be more significant: [QTBUG-29653] Significant performance regression in Qt 5.0.1 compiled with MinGW - Qt Bug Tracker
allows exceptions to traverse through e.g. windows callbacks

DWARF (DW2, dwarf-2)
available for 32 bit only
no permanent runtime overhead
needs whole call stack to be dwarf-enabled, which means exceptions cannot be thrown over e.g. Windows system DLLs.

SEH (zero overhead exception)
will be available for 64-bit GCC 4.8.
rubenvb release is available targetting Win64/Personal Builds/rubenvb/gcc-4.8-release/x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb.7z/download
MinGW-builds release is available

综上,sjlj 是 C标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。
推荐, x86 => dwarf, x86_64 => seh

** extends libraries

--with-gmp=/c/mingw810/prerequisites/i686-w64-mingw32-static
———— mingw32-gmp 可选,GNU 多精度运算库。
———— mingw32-libgmp 可选,GMP 库的 DLL 文件。
———— mingw32-libgmpxx 可选,GMP 库用于 C++ 的 DLL 文件。

--with-mpfr=/c/mingw810/prerequisites/i686-w64-mingw32-static
———— mingw32-mpfr 可选,MPFR 多精度运算库。
———— mingw32-libmpfr 可选,MPFR 多精度浮点运算库的 DLL 文件。

--with-mpc=/c/mingw810/prerequisites/i686-w64-mingw32-static
———— mingw32-mpc 可选,MPC 多精度运算库。
———— mingw32-libmpc 可选,MPC 多精度浮点运算库的 DLL 文件。

--with-isl=/c/mingw810/prerequisites/i686-w64-mingw32-static
———— Library for manipulating sets and relations of integer points bounded by linear constraints

--with-libiconv
———— mingw32-libiconv 可选,字符集转换库。

** 此致

最后写点为什么吧,为什么一定要用 mingw,其实并不是说 msvc不够好,应该就是为了 free 吧
封装太好的东西,往往并不是很完美的,但是也不是开源一定够好,最后只能说喜欢就好了,一次 linux 终生那叫一个折腾吧
 

<think> 首先,用户的问题是基于之前的引用内容。引用[1]和[2]是关于在Windows上安装MinGW和配置环境变量的指南。具体引用内容提到下载、安装MinGW、配置环境变量,以及解决make命令的问题。 用户现在的查询是:"我想解决在已安装mingw的情况下,输入C++命令提示不是内部命令的问题"。用户已经安装了MinGW,但尝试输入C++命令时,系统提示说不是内部命令或可执行文件。用户想知道解决办法。 关键点是:用户输入"C++"命令时出错。但在上下文中,可能用户指的是类似"g++"这样的编译器命令,因为MinGW提供gcc和g++等工具。标准命令是"g++"来编译C++代码,而不是"C++"本身不是一个命令。 从引用[2]中,有提到"make不是内部命令",并建议找到"mingw32-make.exe"。类似地,对于C++编译器,应该是"g++.exe"。 所以,问题本质上是:MinGW安装后,环境变量未正确设置,导致命令行无法识别g++命令。 用户的上一个问题(在系统指令中提到)是关于快速排序的Python代码,但那是示例;当前用户的问题是独立的。 我的回答需要: - 使用中文 - 结构清晰,逐步解决问题 - 引用末尾添加引用标识 - 确保内容真实可靠 回答结构: 1. **理解问题**:确认用户的问题是MinGW安装后,g++命令不被识别。 2. **原因分析**:解释环境变量未正确设置。 3. **解决方案**:提供逐步指导如何配置环境变量。 4. **验证**:指导如何测试配置是否成功。 5. **常见问题**:提及可能的坑并解决。 6. **生成相关问题**:在最后添加相关问题。 从引用中提取关键信息: - 引用[1]:Windows安装MinGW及配置环境变量,详细步骤。 - 引用[2]:MinGW安装教程,解决make命令问题,提到找到mingw32-make.exe并配置环境变量。 对于C++命令,应该是类似g++.exe。用户说"C++命令",可能是个误输入,意指g++。 标准解决办法: 1. 确保MinGW已安装在某个目录,例如C:\MinGW。 2. 找到MinGW的bin目录,例如C:\MinGW\bin。 3. 将此路径添加到系统环境变量PATH中。 4. 测试运行g++ --version来验证。 在回答中,引用相关部分: - 例如,从引用[1]:"配置环境变量"部分。 - 从引用[2]:"找到mingw32-make.exe",但这里应是g++.exe。 生成相关问题: - 类似于示例,添加几个相关问题在最后。 完整回答框架: 1. 引言:解释问题原因(环境变量未设置)。 2. 步骤指导: - 找到MinGW安装路径。 - 添加bin目录到PATH。 - 验证配置。 - 重启命令行。 3. 引用标识:在适当地方添加[^1]、[^2]。 4. 结尾:生成相关问题。 确保语言自然。 </think> ### 已安装MinGW后解决"C++命令提示不是内部命令"的问题 您在Windows系统上已安装了MinGW,但输入类似`g++`(用于编译C++代码的命令)时提示"不是内部或外部命令",这通常是因为环境变量未正确配置。MinGW的bin目录路径未被系统识别,导致命令行无法找到可执行文件如`g++.exe`。下面我将逐步指导您解决此问题。整个过程基于MinGW标准安装流程,并参考了站内资源[^1][^2]。 #### 原因分析 - MinGW安装后,其工具(如`g++.exe`)默认存放在bin目录中(如`C:\MinGW\bin`)。 - 如果系统环境变量PATH未包含此路径,命令行窗口无法自动定位命令。 - 用户可能误输入"c++"命令(实际应为`g++`),但核心问题相同:路径缺失或配置错误[^1]。 #### 逐步解决步骤 请按顺序操作以下步骤(Win10/Win11通用): 1. **定位MinGW安装目录** - 默认安装路径通常是`C:\MinGW`。如果您自定义了路径,请打开文件资源管理器确认。 - 找到bin目录:例如`C:\MinGW\bin`,其中应包含`g++.exe`、`mingw32-make.exe`等文件(如果找不到,请重新检查MinGW安装是否完整)[^2]。 2. **添加bin目录到系统环境变量PATH** - 按下`Win + R`键,输入`sysdm.cpl`并回车,打开"系统属性"窗口。 - 切换到"高级"选项卡,点击"环境变量"按钮。 - 在"系统变量"区域,滚动找到`Path`变量,选中后点击"编辑"。 - 在弹出的窗口中,点击"新建",粘贴MinGW的bin目录路径(如`C:\MinGW\bin`)。 - 确认所有对话框(点击"确定"保存更改)[^1][^2]。 3. **验证配置是否成功** - 重启命令提示符窗口(重要:环境变量更改需要关闭现有窗口重新打开)。 - 输入以下命令测试: ``` g++ --version ``` - 如果配置成功,会显示类似`g++ (MinGW.org GCC-8.2.0-5) 8.2.0`的版本信息。 - 如果仍失败,检查路径是否正确:在命令行输入`echo %Path%`,查看是否包含MinGW的bin目录。 4. **解决常见问题(避坑指南)** - **路径错误**:确保PATH添加的是bin目录(如`C:\MinGW\bin`),而非父目录。错误路径如`C:\MinGW`会导致命令无效[^2]。 - **MinGW安装不完整**:如果bin目录无`g++.exe`,可能是安装时未选择C++组件。建议运行MinGW安装管理器,确保选中`mingw32-gcc-g++`包。 - **命令行未重启**:环境变量更改后,必须关闭所有命令提示符窗口再重新打开。 - **权限问题**:以管理员身份运行命令提示符测试命令(右键点击cmd,选择"以管理员身份运行")。 - **替代命令**:如果`g++`无效,尝试完整路径直接调用,如`C:\MinGW\bin\g++.exe --version`来验证文件存在[^1]。 #### 结语 通过正确配置环境变量PATH,系统即可识别MinGW的编译器命令。完成后,您应能正常使用`g++`编译C++代码(例如运行`g++ -o output.exe input.cpp`)。如果问题仍存在,请确认MinGW安装过程无误,或参考更详细的MinGW配置教程[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值