MinGW 是什么

3.1:MinGW 是什么?

        MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU (http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。

3.2:为什么使用MinGW?

        因为我和很多IT人士一样,不愿意吊死在$M这棵树上。且不说开源这个理念的伟大,仅仅就Windows的安全性也已经让人们很不安心了。如果再深入一点从编写程序来看,在C++标准尚不成熟时期产生的MFC今天看来基本上就是盖子大叔凭着个人(或许是$M公司^^)理解所使用的C++方言。在我们期盼C++0x时代到来之前,没有任何实际行动能比严格遵循C++的ISO标准更能表达我们对于C++这个伟大的哲学体系的尊重。从这个角度来说,遵循ISO标准的实现就是好的实现。所以,MinGW不会比VC差,况且,他既是开源软件家族中的一员,也是*nix平台下事实标准GCC的翻版。如果有一天我们开始使用Linux平台了,会因为今天透过MinGW所了解的GCC知识而受益。

3.3:MinGW 的下载和安装。

        MinGW的官方主页是:

http://www.mingw.org/

        你很容易找到下载的链接。下载文件是放在sourceforge上的,这也表明MinGW本身也是个在开发中的项目。

http://sourceforge.net/project/showfiles.php?group_id=2435

        下载页面上有很多令人眼花缭乱的文件,不用害怕,因为这才是软件最真实的一面。当然,这个软件的提供者为普通使用者也提供了最为简单的下载和安装方式。你只需要下载“MinGW自动下载和安装软件”(Package: Automated MinGW Installer; Release: MinGW-5.1.3)MinGW-5.1.3.exe就可以根据提示简单的安装了。并且,安装后的MinGW甚至可以通过这个文件来自动升级,非常的人性化。

        安装时需要注意以下几个方面:

1) 建议选择Current版本,Previous表示以前的版本;Candidate表示当前正在开发的版本,可能正在测试中,还不是非常稳定。

2) 在选择安装模块的时候,根据我们的需要,只需要选择以下三个:MinGW base tools, g++ compiler, MinGW Make。

3) 安装路径请选择一个容易找到的地方,默认的C:/MinGW 是不错的选择。

3.4:MinGW的简单使用。

        打开“命令提示符”(console)窗口,我们可以简单的把目录转到比如 C:/MinGW/bin 这样的位置去工作。但是这显然不是一个好的方式,因为这样一定会把bin里面搞得很混乱。所以,我们在另外一个“干净”的地方,比如 D:/Project ,把这里设置成MinGW的工程工作区。这样,我们需要在系统的path里面添加能找到bin下面*.exe文件的路径,所以做一个批处理文件是最简单的方法。我的startg++.bat文件这样写的:

@set path=C:/mingw/bin;%PATH%; 

@echo ---**欢迎使用MinGW(GCC)系统**---

@echo Update by lf426 ( E-mail: zbln426@163.com ) 2007-12-10

@cmd 

        然后,你可以建立一个该文件的快捷方式放在桌面上,再为这个快捷方式指定一个漂亮的图标,nice!

        接下来,我们需要建立一个cpp文件,用什么来写cpp呢?

3.4.1:(插播)Vim ??

MinGW 是什么 - Anduony - Anduony的博客

        这又是一个有着传统的“悠久”历史,很好很强大的,免费开源的,牛x文本编辑器。官方主页是:

http://www.vim.org/

        不用怀疑,你可以很容易的下载Vim的安装程序,并且很容易的安装,不需要任何的“破解”-_-!!

        因为Vim很好很强大,所以,太多的内容就留给包括我自己在内的大家自己去学了(我的逻辑Orz)。我们这里简单的只需要了解如下几点:

1) 建立一个名为 abc.def 的文本文件,在console窗口下输入:

vim abc.def

你就进入了vim的编辑界面。

2) 按"i"键,就可以输入文本了。退回到编辑方式,按Esc,再进入插入方式,再按i,就这样...

3) vim在编辑方式下本来的光标移动是h, j, k, l,不过,上下左右箭头也是可以使用的。

4) 编辑完成后,(编辑方式下)按Shift+Z两次,或者:wq就可以保存退出。使用:q!可以不保存强制退出。

3.4.2:MinGW的简单使用。(续)

        继续刚才的话题,我们建立一个叫 hello.cpp 的文件(据说Hello World是程序员的咒语...)

#include <iostream>

int main(int argc, char* argv[])

{

    std::cout << "Hello World." << std::endl;

    return 0;

}

        我们可以简单的使用命令:g++ hello.cpp,与最传统的Unix系统下的C编译器一样,MinGW为我们生成了一个名为a的可执行文件,当然,在win32下,名字叫做a.exe。

        可以使用参数 -o 来指定编译的可执行文件的名字:g++ -o hello.exe hello.cpp (或者也可以不写名exe,直接g++ -o hello hello.cpp 结果一样)。这样,得到的文件就是hello.exe。

        可以使用参数 -c 来生成与源文件名相同的目标文件:g++ -c hello.cpp ,得到的文件是hello.o 。

        目标文件可以继续连接成可执行文件:g++ hello.o ,得到文件a.exe 。

        多个源文件,目标文件和库文件都可以同时编译和连接。

3.5:获得MinGW下的SDL开发库。(Development Libraries)

        下载页面:http://www.libsdl.org/download-1.2.php

        下载:SDL-devel-1.2.13-mingw32.tar.gz (Mingw32)

3.6:为MinGW设置SDL库。

        找到你在硬盘上安装MinGW的位置,类似:

C:/MinGW

打开include文件夹,在里面建立一个新文件夹,取名为SDL,打开这个新的文件夹:

C:/MinGW/include/SDL

然后,将SDL Development Libraries中include文件夹里面的文件全部拷贝到刚才建立起来的那个新文件夹中。

然后,回到MinGW的文件夹下,打开lib文件夹:

C:/MinGW/lib

将SDL Development Libraries中lib文件夹下的libSDL.dll.a, libSDL.la和libSDLmain.a三个文件拷贝到刚才的那个MinGW的lib文件夹下。

最后,把SDL Development Libraries中lib文件夹下的SDL.dll文件拷贝到

C:/WINDOWS/system32

下。当然,另外一个选择是将SDL.dll随时绑定到使用了SDL库编译的*.exe文件所在的文件夹中。这通常在发布你的程序的时候使用。

3.7:建立第一个SDL程序。

运行我们之前的那个startg++.bat 文件,打开console窗口,执行命令:vim main.cpp ,将下列代码写入并保存。

#include <iostream>

#include "SDL/SDL.h"

int main(int argc, char* argv[])

{

    try {

        if ( SDL_Init(SDL_INIT_EVERYTHING) == -1 )

            throw "Could not initialize SDL!";

    }

    catch ( const char* s ) {

        std::cerr << s << std::endl;

        return -1;

    }

    std::cout << "SDL initialized./n";

    SDL_Quit();

    return 0;

}

执行g++命令:g++ -o MySDL.exe main.cpp -lmingw32 -lSDLmain -lSDL

参数 -l (小写的L)使库文件得以与源文件一起编译和连接。(简单的可以认为-labc即连接了名称符合libabc.*的所有库文件)

最后说明的两个参数是:-mconsole 和 -mwindows

他们的效果是使可执行程序是带命令行控制窗口的或者是纯Windows窗口的,缺省情况下应该是带命令行控制窗口的。

运行mysdl.exe可以看到文件的执行情况。




来源:http://blog.youkuaiyun.com/k1988/article/details/4375382

<think>好的,我现在需要回答用户关于MinGW的定义、用途以及它在编程工具中的角色。首先,我得回忆一下MinGW的基本信息。MinGW的全称是Minimalist GNU for Windows,这应该是一个在Windows上提供GNU工具链的项目。用户提供的引用里提到,MinGW基于GCC和Binutils,用来编译和链接在Windows系统上运行的代码,支持C、C++和Fortran等语言[^2]。 接下来,定义部分需要明确说明MinGW是什么。根据引用[2],它是一个编译器系统,基于GNU GCC和Binutils,所以这点必须提到。同时,引用[4]提到它由很多GNU软件和开源工具组成,提供Linux系统功能在Windows上,这可能涉及到POSIX兼容性或者模拟环境,但MinGW是否像Cygwin那样模拟呢?需要确认。MinGW应该是直接生成Windows原生可执行文件,而Cygwin可能依赖库,这点需要区分清楚。 用途方面,用户可能想知道为什么用MinGW。比如,在Windows上编译Linux下开发的程序,或者使用GCC工具链的优势。引用[1]提到gcc、g++调用汇编器和连接器,属于Binutils的一部分,所以MinGW应该包含这些工具,使得整个编译流程可以在Windows完成。此外,跨平台开发可能是一个用途,但需要确认MinGW是否支持交叉编译。 编程工具部分,MinGW提供了编译器(gcc、g++)、调试器(gdb)、生成工具(make)等,这些应该列出来。引用[3]提到Linux平台的宏定义,但用户的问题是关于MinGW的,可能这里需要说明MinGW在Windows下的宏定义或兼容性处理,不过用户引用[3]可能只是作为对比,说明不同平台下的宏差异,但可能不需要深入这部分,除非直接相关。 需要确保回答结构清晰,先定义,再用途,再编程工具组成部分。注意用户提供的引用,正确引用来源,比如引用[2]和[4]关于MinGW的定义和组成,引用[1]关于编译器调用其他工具。 可能的问题点:MinGW和Cygwin的区别是否需要解释?用户没有直接问,但可能隐含。但根据引用[4],Cygwin提供Linux系统功能集合,而MinGW更专注于编译Windows原生程序。所以可以提到MinGW生成的是原生Windows应用,而Cygwin可能需要运行时库,但这点是否在引用中有支持?引用[4]说Cygwin提供Linux功能,而MinGW是另一回事,可能用户引用的[4]其实是描述Cygwin,但被错误关联了?需要检查用户提供的引用内容。 用户提供的引用[4]原文是:“它是由很多GNU软件和一些开放源码的工具组成的一个集合,用来在Windows上提供Linux系统的功能。” 这里可能是指Cygwin,但用户可能混淆了。而引用[2]明确说明MinGW是编译到Win32系统。因此,在回答中可能需要澄清MinGW与Cygwin的不同,但用户的问题并未提及,所以可能只需根据现有引用回答,避免引入未提及的信息,除非必要。 总结回答结构: 1. 定义:MinGW是基于GNU工具链的编译器系统,用于Windows平台,生成原生应用。 2. 用途:允许开发者使用GCC在Windows编译C/C++等代码,无需POSIX环境。 3. 编程工具:包含编译器、链接器、调试器等,支持跨平台开发。 然后生成相关问题,如与其他工具的区别,如何安装,应用场景等。 现在需要确保所有技术细节正确,比如MinGW是否支持C++11,或者是否有其他组件,但用户的问题比较基础,可能不需要深入版本特性。需要引用正确的来源,如引用[2]和[4](但注意引用[4]可能实际指其他项目,需要确认)。如果用户提供的引用[4]是描述MinGW,但实际内容更像Cygwin,可能需要处理这个矛盾。例如,用户引用[4]说“用来在Windows上提供Linux系统的功能”,这更符合Cygwin的描述,而MinGW是生成原生Windows应用,不模拟Linux环境。所以可能用户引用中有错误,但作为回答者,必须按照用户提供的引用来处理,可能需要指出差异。 例如,在回答中说明MinGW不同于Cygwin,后者模拟Linux环境,而MinGW直接编译为Windows原生程序,引用[4]可能指Cygwin,但用户可能混淆了。但根据用户给出的引用[4],它被用来解释MinGW,所以需要澄清。或者,可能用户引用[4]是描述MinGW,但描述有误。此时可能需要以用户提供的引用为准,但指出正确信息。但作为回答者,必须基于用户提供的材料,因此可能需要调整。例如: 用户引用[4]说:“它是由很多GNU软件和一些开放源码的工具组成的一个集合,用来在Windows上提供Linux系统的功能。” 如果这里的“它”指MinGW,那么这个描述是错误的,因为MinGW并不提供Linux环境,而是允许在Windows上用GNU工具链编译原生应用。而Cygwin才是提供Linux-like环境。因此,可能用户混淆了两者,但根据用户提供的引用,引用[4]可能被错误地关联到MinGW,而实际是描述Cygwin。但用户现在的问题是关于MinGW,所以需要正确处理。 在回答中,可能需要指出MinGW的用途不同于引用[4]中提到的提供Linux系统功能,而是直接生成Windows应用。或者,可能用户提供的引用[4]中的“它”指的是另一个工具,比如Cygwin,但用户错误地将其作为MinGW的引用。这需要谨慎处理,避免误导。 可能解决方法是:在回答中,正确描述MinGW,并指出引用[4]可能指的是另一个类似项目,比如Cygwin,而MinGW的用途不同。但用户可能希望回答仅基于提供的引用,所以可能需要忽略引用[4]中可能的错误,或者指出差异。 例如,在回答中: MinGW是一个编译器系统,基于GNU GCC和Binutils,用于在Windows上编译生成原生应用程序。与某些工具(如Cygwin)不同,MinGW不模拟Linux环境,而是直接调用Windows API,生成不依赖第三方运行时库的可执行文件[^4]。 这里,引用[4]可能被用户误解,但根据正确知识,MinGW生成原生应用,而Cygwin提供Linux环境。因此,在回答中需要正确区分,但可能用户提供的引用[4]有误,但作为回答者,应基于正确信息,同时引用用户提供的材料。例如,引用[4]提到“提供Linux系统的功能”,这可能是指另一个工具,但用户将其关联到MinGW,所以需要澄清。 这可能需要进一步的处理,但时间有限,可能需要按正确信息回答,并适当引用用户提供的引用,可能忽略引用[4]中的矛盾部分,或者指出差异。 综上,回答的结构大致如下: 定义:MinGW(Minimalist GNU for Windows)是基于GNU GCC和Binutils项目的编译器系统,用于在Windows平台编译和链接代码,支持C、C++、Fortran等语言。 用途:允许开发者在Windows系统上使用GNU工具链编译生成原生可执行文件,无需额外的运行时环境。与Cygwin不同,MinGW直接调用Windows API,生成不依赖第三方库的程序。 编程工具组成:包含GCC编译器(gcc、g++)、GDB调试器、链接器(ld)、汇编器(as)以及make等构建工具[^1]。开发者可以利用这些工具进行跨平台开发,或在Windows环境中使用开源代码库[^3]。 相关问题可能涉及MinGW与MSVC的区别,安装配置方法,如何编译项目,与Cygwin的比较等。</think>### MinGW的定义与用途 #### 定义 MinGW(Minimalist GNU for Windows)是一个基于 **GNU GCC** 和 **Binutils** 项目的编译器系统,专门用于在 **Windows 平台** 上编译和链接代码,支持 C、C++、Fortran 等编程语言[^2]。它提供了一套完整的 GNU 工具链,包括编译器、调试器和构建工具,但生成的程序是原生的 Windows 可执行文件,无需依赖外部运行时环境。 #### 用途 1. **跨平台开发** 允许开发者在 Windows 上使用 **GNU 工具链** 编译 Linux/Unix 环境下的开源项目(如使用 Autotools 或 Makefile 的项目)[^3]。 2. **生成原生 Windows 程序** 直接调用 Windows API,生成不依赖第三方库的 `.exe` 或 `.dll` 文件,适合开发轻量级应用。 3. **教育与小规模开发** 因其轻量化特性,常用于教学场景或小型项目开发。 #### 编程工具组成 - **编译器**:`gcc`(C)、`g++`(C++)、`gfortran`(Fortran)[^2] - **调试器**:`gdb` - **构建工具**:`make`(自动化编译) - **二进制工具集**:`ld`(链接器)、`as`(汇编器)等(来自 Binutils 项目)[^1] 例如,使用 MinGW 编译 C 代码的命令为: ```bash gcc -o output.exe input.c ``` #### 与 Cygwin 的区别 - **MinGW**:生成原生 Windows 程序,依赖 Windows API,无 Linux 模拟层[^4]。 - **Cygwin**:通过动态库(`cygwin1.dll`)模拟 POSIX 环境,支持在 Windows 中运行 Linux 风格的代码[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值