gcc for win32 开发环境介绍 -...

38
GCC for Win32 开发环境介绍 作者:北斗星君(VisionCat

Upload: hoangduong

Post on 30-Jun-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

GCC for Win32 开发环境介绍

作者:北斗星君(VisionCat)

Page 2: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第一章 在视窗操作系统下的 GCC

第一节 GCC 家族概览

GCC是一个原本用于Unix-like系统下编程的编译器。不过,现在GCC也有了许多Win32

下的移植版本。所以,也许对于许多 Windows 开发者来说,GCC 还是一个比较陌生的东西。

所以,我希望通过这章的叙述,让你——一个 Windows 开发者对 GCC 这一个优秀的编译器

有一个大概的了解。

历史

GCC 是 GNU 公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC 只是

一个 C 语言编译器,他是 GNU C Compiler 的英文缩写。随着众多自由开发者的加入和 GCC

自身的发展,如今的 GCC 以经是一个包含众多语言的编译器了。其中包括 C,C++,Ada,Object

C 和 Java 等。所以,GCC 也由原来的 GNU C Compiler 变为 GNU Compiler Collection。也就

是 GNU 编译器家族 的意思。当然,如今的 GCC 借助于他的特性,具有了交叉编译器的功

能,即在一个平台下编译另一个平台的代码。

直到现在,GCC 的历史仍然在继续,他的传奇仍然被人所传颂。

Windows 下的 GCC 家族

起初,GCC 是用于 Unix,Unix-like 系统的编译器。不过,现在 Windows 下也出现了 GCC

的稳定移植版。这要感谢 Internet 上众多程序员的共同努力。

如今,在 Windows 下比较流行的 GCC 移植版主要有三个。他们是 MinGW,Cygwin 和

Djgpp。虽然,Djgpp 是应用于 DOS 系统的,考虑到 windows 对 DOS 的兼容,所以也将 Djgpp

纳入其中了。

总体来说,MinGW,Cygwin 和 Djgpp 各有特色,针对不同的应用场合,可以选择不同

的移植版来满足需要。MinGW 这个系列的移植,主要方向是让 GCC 的 Windows 移植版能

使用 Win32API 来编程。而 Cygwin 的目标是能让 Unix-like 下的程序代码在 Windows 下直

接被编译。至于 Djgpp,则是想让 DOS 下也能用上 GCC。

所以,对于开发人员不同的需求。选择合适的移植版会让工作变得轻松而高效。

本书的 GCC

我个人对 GCC 的移植版都非常喜欢。不论是 MinGW 还是 Cygwin,亦或是 Djgpp。在

本书中,除了特殊说明以外,所述的内容适合所有这三种移植版。

不过,考虑到现在在Windows下用的比较多的是MinGW系列。再加上MinGW较Cygwin

和 Djgpp 安装和使用更为简便。所以,建议读者学习时还是使用 MinGW。

Page 3: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第二节 入乡随俗的 MinGW

简介

MinGW 是 Minimalistic GNU for Windows 的缩写。她是一个建立在 GCC 和 binutils 项

目上的编译器系统。和其他 GCC 的移植版相比,她可以说是最接近 Win32 的一个了。因为,

MinGW 几乎支持所有的 Win32API,这也是 MinGW 的特色之一。她所连接的程序,不需要

任何第三方库就可以运行了。在某种程度上看,MinGW 更像是 VC 的替代品。

获得与安装

MinGW 可以从 MinGW 的官方网站 http://www.mingw.org 上获得。

如果,你要安装 MinGW,那么你有两种安装方案。下面我来一一介绍。

安装方案一:

首先,你要从 http://www.mingw.org/download.shtml 上下载如下几个压缩包。考虑到文

件的更新和文章的灵活性。我将只写出文件的主要部分,将省去版本好和更新日期。

gcc-core C 语言编译器

gcc-c++ C++语言编译器

mingw-runtime MinGW 的运行时库(这个必须安装)

win32api win32 的 API 函数头文件和连接库

binutils MinGW 的汇编器和连接器等基础工具

gdb MinGW 中的调试工具

mingw32-make Make 工具,用以更好的管理你的项目

然后,将上述文件逐一下载,然后全部解压缩到一个目录下就可以了,我这里假设你是

移动到$(MINGW)这个目录下了。这样,你的 MinGW 就算安装成功了。

最后到 DOS 终端上,将当前目录转换成 $(MINGW)/bin 下。输入

C:\>gcc -v

看到一段 gcc 的版本信息,这就能说明,你的 gcc 已经可以正常工作了。

安装方案二:

你可以从 http://www.mingw.org/download.shtml 上下载 MinGW5.0.2.exe 这个程序。至

少,在我写此文的时候,这个是最新版本。

下载以后运行安装,至于安装过程,我想我就不一一介绍了。对于 Windows 下的开发

人员,我想这个应该不是什么问题了。

Page 4: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

在一切都选择好以后。这个程序就开始从 Internet 上下载所需要的压缩包。然后,逐一

解开,安装。

总体来说,两种方法各有长处。不过,本人偏爱第一中方法。因为,控制度高,而且,

更新也比较简单。自己心里也比较明了。

环境设置:

对于我们这些使用者来说,最好是能够简单方便的使用工具。所以,我们就需要设置环

境,便于我们使用 MinGW。

对于设置,我们只需要在环境变量中的 PATH 变量中,添加$(MINGW)/bin 这个路径就

可以了。

这样,你就可以在任何目录下使用 MinGW 了。

第三节 人在曹营心在汉的 Cygwin

介绍

Cygwin,其实并不是一个 GCC。她是让 Windows 拥有 Unix-like 环境的软件。所以,

GCC 自然也就会包含在里面。不过,对于开发者,Cygwin 是一个开发环境。而对于用户来

说 Cygwin 是一个运行环境。

Cygwin 唯一和 MinGW 最大的区别在于,使用 Cygwin 可以在 Windows 下调用 Unix-like

的系统函数。比如进程函数,等等。所以,虽然说,Cygwin 是运行在 Windows 下的,但是

她还是使用的是 Unix-like 系统的函数和思想。

获得与安装

Cygwin 可以从 Cygwin 的官方网站获得安装程序 http://www.cygwin.com/

在网站上下载 Cygwin 的安装程序 setup.exe。然后运行便可以了。

关于前面的设置,我想不用多做介绍了。因为,对于这些我想 Windows 下的开发人员

应该相当清楚了。

在到了选择安装的组件时,在 Devel 选项下,将 gcc-core,gcc-g++ 等前的 skip 点击成

你所需要的版本号。

然后在 Lib 选项卡中,将 glib2,glib2-devel,glib2-runtime 前的 skip 点成版本号。

接下来,就点击 next 就可以了。在一段漫长的等待时间后,你的 Cygwin 开发环境就算

安装好了。

相对来说,Cygwin 的安装和配置都比较简单。因为,Cygwin 提供了一个比较健全的安

装程序。

Page 5: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

使用

在安装目录下,运行 cygwin.bat 就可以启动 cygwin 环境了。这是一个模拟 Linux 的环

境,所以很多地方可能和 Dos 有比较大的差距。不过,你编译出的程序可以直接在其他没

有安装 Cygwin 的机器上运行。还有,如果要切换到 windows 下的其他盘下,比如 D 盘。那

么就可以使用

$cd /cygdrive/d/

对于 Cygwin 更多关于使用的内容,你可以到 Linux 社区去获得参考。

第四节 脚踏两只船的 Djgpp

介绍

Djgpp,是一个在纯 Dos 下的 GCC 移植版本。她使用一些软件将纯 Dos 设置成 32 位的

环境,并运行由她编译出来的程序。总体来说,Djgpp 并不是一个 Windows 的移植版。不过,

她确实可以在 Windows 下运行。对于一些特殊应用。Djgpp 是唯一适合的。

获得与安装

Djgpp,可以从 Djgpp 的官方网站上下载 http://www.delorie.com/djgpp/

不过,这里 Djgpp 为用户做了更好多的安排。她为用户提供了一个定制安装的页面。

http://www.delorie.com/djgpp/zip-picker.html

您只需要在上面填写响应的内容,然后递交。她将会给你一份完整的安装方案。

使用

相对来说,Djgpp 我并不是经常使用。所以,本文中在没有特殊说明情况下,不会使用

Djgpp 的。

文外音:

总体来说,这篇文章写的有些匆忙。所以可能有些地方有不足。所以,希望各位能够多

多原谅批评和指教。下一章,我将介绍 GCC for Win32 的 IDE。同时,从这一章开始,我将

向各位读者做一个小小的要求。那就是,希望你们能够将自己对这篇文章感到的不足告诉我,

我将随时修改以发表的内容,以适合广大读者的要求。如果各位有什么想法或者意见,疑惑。

希望您能到 http://blog.csdn.net/visioncat 上提出。

STUDIO 软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)

Page 6: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第二章 GCC 的外衣——IDE 环境

上文回顾:

在上文中,我们了解的 windows 下的 GCC 编译器。这一章我们将来看 IDE 的介绍了。

在此,我还要为各位表示抱歉,因为那么久才写出这篇文章。

第一节 IDE for GCC 概览

IDE,即 Integrated development environment,也就是综合开发环境。对于习惯使用 VC

的 windows 程序员来说,在 windows 下,GCC 的 IDE 也许就比较陌生了。所以,想通过这

一章简单介绍一下 GCC 所使用 IDE。

GCC 的 IDE 是什么?

IDE,也就是 综合开发环境 。她是为了便于程序员开发,管理项目的软件。对于 C/C++

来说,她主要包括四个部分。代码编辑器,编译连接器,调试器和工具库。而 GCC 本身就

包含了编译连接器,调试器和工具库。所以,严格的说,GCC 的 IDE 主要功能就是一个代

码编辑器,是用于编写代码的软件。

所以,从上面我们可以看到一个问题,那就是支持工具库的不是 IDE,而是编译器。如

果你使用不同的 IDE 开发项目,只要你使用的编译器是相同的,那么她就能支持相同的工

具库。

Windows 下的为 GCC 设计的 IDE 有那些?

许多 GCC 的 IDE,毕竟不是商业化制作的,因此很多地方都有不足的地方。下面是我

个人认为不错的几个 IDE。

Dev-C++,这个 IDE 可谓是专门为 GCC 所设计的 IDE。Visual-MinGW,一个模仿 VC6.0

界面的 IDE。最后是最近最火的 Code::Blocks,由于也是最近接触,所以也不是太了解,不

过,给人的第一印象是,特别像 VC.Net 的界面。

总体来说,各个 IDE 都有其自身的特点。对于初学者,Dev-C++比较不错,因为各种工

具库基本都有为 Dev-C++设计的安装包。对于从 VC 转形到 GCC 的人来说,Visual-MinGW

是一个不错的选择,因为据我所知,大家熟悉和喜爱的还是 VC6.0 居多,因此模仿 VC 的

Visual-MinGW 是一个不错的选择。对于打算用 GCC 开发项目的人来说,Code::Blocks 的确

会成为你的最爱,因为她的项目管理实在是太优秀了。其实,每个人都会从中找到适合自己

的 IDE。

本书的 IDE

本书使用哪种 IDE 呢?其实,本书不是专门为哪种 IDE 所写的。因此,本书所写的都

Page 7: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

是针对 GCC 本身所写的。因此,本书中的 IDE。其实就是 windows 下最不起眼的 notepad。

不过,为了书写便捷,我通常使用 Emacs 或者 Notepad++来书写代码。Emacs 是一个 Unix

环境下优秀的编辑软件,Notepad++是一个 notepad 增强版,个人感觉比较适合开发程序。

本书会在每个例子程序后附带一个 Makefile 文件,通过这个文件各位就能够非常直接的了

解到环境的配置方式,然后根据不同的 IDE 为你的程序添加不同的参数。

第二节 最专一的 Dev-C++

简介

Dev-C++,全称 Bloodshed Dev-C++,是由 Bloodshed 公司开发的一款 C/C++的 IDE。她

所默认的编译器为 MinGW,但是她能够支持 Cygwin 等其他任何 GCC 的移植版以及 GCC

本身。她是使用 Delphi 开发的,因此有些 C/C++开发者觉得她的血统不纯。但是我个人认

为,只要适合的,我们又何必在意她用什么开发呢?

获得与安装

Dev-C++,可以从她的官方网站 http://www.bloodshed.net 上获得。在官方网站的下载

页上,你将会看到三个安装程序。下面我一一解释一下。

Dev-C++ with Mingw/GCC 这个是包含 MinGW 的安装包。安装这个包以后,你将拥有

完整的一个 IDE 开发环境,自然包括编译器等。

Dev-C++ executable only 这个是只有 IDE 的安装程序,其中不包括任何编译器。所有,

如果你没有安装 GCC 编译器的话,安装这个包以后你将会出现无法编译项目的问题。

Dev-C++ source code 这个是源代码包,当然其中只有 Dev-C++的代码,没有任何 GCC

的代码。

通常偷懒的人选择 Dev-C++ with MinGW/GCC 这个包,这个也是我建议初学者安装的

包。如果,你在上一章以后,已经安装了某个 GCC 的 windows 移植版,那么你可以选择

Dev-C++ executable only 这个包。如果你想研究一下 Dev-C++的代码,并且对 Delphi 有所了

解,那么 Dev-C++ source code 是你唯一的选择。

下面我对 Dev-C++ executable only 的安装方式进行说明。而 Dev-C++ with MinGW/GCC

的安装和她差不多,只是可以省去后面配置编译器的问题。

安装

首先,从官方网站下载 Dev-C++。运行安装程序以后,您将看到如下的提示。

Page 8: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个是让你选择安装时候所使用的语言这里,我们只能选择 English,因为没有中文安

装界面。

这个是许可证界面,选择 I Agree。感觉现在大家用盗版用多了,对于许可证都不关心

了,可是我想作为一名开发者,应该对许可证的内容重视一下,毕竟你的软件也是要被人使

用的。

Page 9: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个是安装选项界面。其中,你可以选择你所要安装的内容和安装的一些选项,比如是

否关联文件等。如果你下载的是 Dev-C++ executable only ,那么你将无法使用 Mingw

compiler system(binaries,headers and libraries) 这个选项,因为这个安装文件中没有包含这个。

这个界面是让你选择安装路径。你可以在这里选择你安装 Dev-C++的路径。我这里假设

你安装在$(DEV)下。

这个界面是询问你是否为 windows 上的所有用户安装 Dev-C++。这里,我选择 否。如

果你想让本地机上,每个用户都可以使用 Dev-C++,那么你可以选择 是。

在安装程序结束后,默认会运行 Dev-C++。你在首次运行时,会看到如下界面。

Page 10: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个是选择你 Dev-C++所使用的语言,界面图标和窗口风格。如图上选择,我们使用的

语言是中文,使用 New Look 图标,并使用 XP 风格的窗口。

这个是询问你是否要 Dev-C++提供函数补全功能,她将从头文件中读取函数头,然后为

你补全。但是要消耗一定的 CPU 时间。如果,你的机器还可以的话,并且需要此功能那么

你可以尝试一下。

至此,我们的 Dev-C++算是安装成功了。如果,下载的是 Dev-C++ with MinGW/GCC,

那么后面的内容你可以不关心了。因为,你的 IDE 环境已经全都配好了。如果不是,那么

您还需要自己安装编译器。

配置编译器

按照我第一章所介绍的,安装好某一个 GCC 移植版编译器,可以是 MinGW,也可以

是 Cygwin。假设,您安装的目录为$(GCC),那么请将如下路径添加到系统变量 PATH 后。

Page 11: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

$(GCC)\bin;

这样,你的 Dev-C++就拥有了编译器了。当然,你也可以从 Dev-C++的网站上下载

MinGW 全套的 Dev 包,然后用 Dev-C++带的包管理程序安装 MinGW。

添加新的工程类型

在平时,我们通常会建立自己的工程文件。但是,如果每次都要自己设置环境变量,编

译器参数未免也太麻烦了。本处就要介绍,如何将自己定义的工程类型,添加到 Dev-C++

的新建工程选项里。就如下图所示,

Dev-C++的项目模板文件,保存在安装目录的 Templates 目录下。文件以 template 后缀

结尾,你可以用记事本打开。下面我们一起来建立一个自己的项目。

在 templates 目录下新建一个名为 MyProject.template 的文本文档。内容如下:

[Template]

ver=1

Name=MyProject

Icon=0

Description=一个小小的测试

Catagory=HOME

[Unit0]

CName=main.c

C=MyProjectC.txt

[Unit1]

CName=myProject.h

C=MyProjectH.txt

[Project]

UnitCount=2

Type=1

IsCpp=0

Compiler=-DPASSWORD

Page 12: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

Linker=-O2

Name=My Project

ProjectIon=0

[Template] 标签后的内容是对项目的介绍。

Ver 变量是 Template 文件的版本,这边默认是 1 不要更改。

Name 变量是项目的名称

Icon 变量是项目图标的路径,如果没有那么就写 0

Description 变量是对这个模板的介绍。

Category 变量是这个项目属于哪种项目,这里我们自己建立了一个名为 Home 的类

型。

[Unitx] 其中 x 为从 0 开始的任何整数,是定义项目中所包含的文件。

CName 变量是说明这个文件在项目保存时默认的文件名。(C 语言时使用)

C 变量是 Cname 文件的源文件。(C 语言时使用)

CppName 变量同 Cname 变量,只是在 C++语言时使用。

Cpp 变量同 C 变量,是在 C++语言时使用的。

[Project] 标签是对工程的总体介绍

UnitCount 变量是说明整个项目有多少文件,从 1 开始。

Type 变量是告诉 IDE 这个项目采用何种编译方式。0 为 windows 窗口程序,1

为控制台程序,2 为静态连接库,3 为动态连接库。

IsCpp 变量是说当前项目是否只能使用 C++语言,0 表示不是,1 表示是。

Compiler 变量是编译器参数

Linker 变量是连接器参数

Name 变量是项目的名称

ProjectIcon 变量是项目编译以后,主程序的图标文件。

下面给出了 MyProjectC.txt 和 MyProjectH.txt 的内容。

//MyProjectC.txt

#include <stdio.h>

#include <stdlib.h>

#include "myProject.h"

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

printf("%s\n",S);

return(0);

}

Page 13: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

//MyProjectH.txt

#ifdef PASSWORD

#define S "Hello World"

#else

#define S "NO PASSWORD"

#endif

重新启动 Dev-C++,在你的项目中就存在了我们的项目。

最后的内容

相对来说 Dev-C++的功能还是比较简单的。而且,界面也是属于中文的。所以,慢慢摸

索你一定可以熟悉这个环境的。

文外音:

总的来说,Dev-C++是一个不错的 IDE。很适合对 GCC 不是太了解的人使用。当然,

这里我还是要表示抱歉,因为最近要忙于考试,所以迟迟没有推出这篇文章。现在经历了漫

长的考试时间,我在放假的刚开始,就匆匆写出了一些,赶紧贴出来。这里我还是希望各位

能提出一件和疑问。如果各位有什么想法或者意见,疑惑。希望您能到

http://blog.csdn.net/visioncat 上提出。谢谢。

STUDIO 软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)

Page 14: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第三节 最脸熟的 Visual-MinGW

上文回顾:

在上一篇文章中,我们了解的 IDE 和 Dev-C++。这篇文章中,我将带领各位继续我们

的 IDE 之旅。继续介绍 Visual-MinGW 和 Code::Blocks。希望这些 IDE 能给各位在工作和学

习中带来便利。

简介

Visual-MinGW 是一个专门为 MinGW 所设计的 IDE。如果,你曾经用过 VC++ 6.0 这个

IDE,你的第一感觉就是,Visual-MinGW 和 VC++ 6.0 非常相似。所以,对于曾经用惯 VC

的朋友们来说,Visual-MinGW 不失是一个好的选择。然而,Visual-MinGW 的开发与更新似

乎并不积极。因此,还有不足的地方。Visual-MinGW 的理念是提供一个高效的,快速的创

建代码的 IDE。

获得与安装

Visual-MinGW 可以从他的官方网站 http://visual-mingw.sourceforge.net 获得。在官方网

站上,您将看到有 Development 和 Visual-MinGW 两个下载选项。这里,我只以 Visaul-MinGW

的下载项为例。Visual-MinGW 是一个不包含 MinGW 编译器的安装程序。

安装

首先,从官方网站下载前面所说的安装程序,然后运行。基本的安装步骤和 Dev-C++

类似。由于没有什么选项。我们这里就不一一举例了。

接着,我们运行 Visual-MinGW。在第一次运行时,我们将看到如下对话框。

这是询问你,是否关联相关文件。也就是让 Visual-MinGW 成为默认的文件编辑器。

Page 15: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个对话框是告诉你,需要将 MinGW 的目录设置进你的 Compiler 目录。

如果,你安装了 MinGW。那么你在这里就可以设置了。我假设,你的 MinGW 安装在

$(MinGW)目录下。那么在 Compiler Path 前打勾,并将$(MinGW)添加上去。

如此,你的 Visual-MinGW 就算设置好了。如果,你没有安装 MinGW,那么你可以查

看第一章的内容。这里,我就不多做介绍了。

配置

如果,你需要改变编译器所在的目录。可以使用如下方法调用设置界面。

在菜单栏选择 File -> Preferences.. -> Environment 这样,你就开启了设置界面。这里的

设置,和第一次运行的设置一样。

使用

其实,Visual-MinGW 的使用方式和 VC 非常类似。基本熟悉 VC 的朋友。一定对

Visual-MinGW 不会陌生的。所以,在这里我就不详细介绍了。不过,可惜的是,Visual-MinGW

似乎不能添加自己的项目类型。所以,这也给我们带来了不少不便。

Page 16: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第四节 最新颖的 Code::Blocks

简介

Code::Blocks 不只是 GCC 的一个 IDE,也可以支持其他的编译器,比如 MS-VC,Borland

C++等等。所以,总体来说 Code::Blocks 并不是某个编译器的特属 IDE。Code::Blocks 的界

面设计很像 VC.net 的界面。从效果上看的确不错。而且,这个 IDE 支持插件功能,你可以

从他的官方网站上获得这个 IDE 的插件和相关的帮助。

获得与安装

Code::Blocks 你可以从他的官方网站 http://www.codeblocks.org 获得。在官方网站上,

有两种版本下载,一种是带编译器的,一种是不带的,我们可以从文件的体积来分辨这些。

这里,我下载的是不带编译器的。当然,带编译器的安装方式也类似。

安装

在网上下载 Code::Blocks 后,双击运行安装。

上面是安装的欢迎界面

Page 17: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个是 Code::Block 的许可证界面。这里,软件用了 GPL,这就说明你可以免费使用和

传播。

这个是询问你安装的路径,你可以选择自己喜欢的路径。

Page 18: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

这个是询问你安装的模式,因为软件也不大,所以如果你的硬盘空间有空余的话,就选

择完全模式吧。

这个是安装前的确认,如果没有什么问题的话,他将开始将 Code::Block 安装到你的机

器上了。

Page 19: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

在一系列的安装后,你将看到如上的界面。提醒你已经安装好 Code::Block 了。Launch

Code::Block 意思是马上运行 Code::Block。

配置

在第一次运行 Code::Block 时,她会询问你所使用的编译器种类。如果不是有特殊要求

的话,我这里选择 GNU GCC Compiler。如果你一开始选错了也没有关系。

由于,我们安装的是没有编译器的版本。所以,我们这里必须安装编译器,具体的安装

方式,可以参照前面的文章。这里,建议安装 MinGW。现在我假设你的编译器安装在了,

$(MINGW)目录下。

运行 Code::Block,在菜单中选择 Build -> Compiler Options。调出编译器配置框。

Page 20: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

如图所示,这个就是编译器选项,我们这里使用的是 GCC 所以,在最开始选择。GNU

GCC Compiler。说明你选择使用的是 GCC。

然后选择 Programs 选项卡,设置我们 MinGW 的路径。

在 Compiler's installation directory 中添加你 MinGW 的路径,按照上面的定义他应该是

Page 21: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

$(MINGW)。注意别把 bin 目录包含进去。如果你只安装了 C 语言编译器,并且你只使用 C

语言编译器。请将 Linker for dynamic libs 中的 mingw32-g++.exe 改为 mingw32-gcc.exe。

至此,我们已经顺利完成 Code::Block 的安装与配置了。如果,你选择的是带编译器的

版本,那么你可以忽略配置部分。

使用

总体来说,Code::Block 的使用还是比较显而易见的。对于有一些编程经验的人,使用

Code::Block 并不是一件非常困难的事情。当然,Code::Block 可以建立自己的项目模板。具

体的做法和 Dev-C++类似。您可以查看$(CodeBlocks)/share/CodeBlocks/templates 目录中的文

件。

最后的内容:

总体来说,这次介绍的两个 IDE 总体来说还是不错的。不过,笔者使用最多的还是

Dev-C++。对于 Visual-MinGW 和 Code::Blocks 我了解并不多。前者是因为并不太喜欢,后

者是由于刚出来。不过,还是希望我写的内容对各位有用。当然,我个人的喜好不会影响各

位的使用。现在笔者没有使用其中任何一款 IDE,笔者现在使用的 IDE 是我自己架设的,

在 Windows 下我使用的是 notepad 作为我编写代码的工具,使用 Makefile 管理项目。所以,

各位可以放心的选择各自喜好的 IDE。不用担心会不被支持,或者被厌弃。至此,关于 IDE

的介绍将就到这里结束了。以后我将主要针对函数库本身做详细的介绍,并提供教程。

文外音:

首先,对各位读者表示抱歉。因为原本我准备趁着这次暑假多写一点东西的。可是,并

没有预期的那么好。原本这篇文章应该在上个月写出来的。可是,上个月为了练习编程技巧,

写了个 Sudoku Puzzle,因此没能有时间写文章了。如果各位想要的话,可以问我要。那个

程序原本预计一周完成的,可是没想时间远远超出了我的预计。后来,八月初才完成的。本

想可以写了吧,没想又发起高烧了,结果久久没能写出文章,对各位对我的期望,我表示非

常抱歉。如果你对于文章有什么意见,疑惑或者问题,可以到 http://blog.csdn.net/visioncat

上提出。我尽我所能将在第一时间回答您。

STUDIO 软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)

Page 22: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第三章 GCC 粗探——GCC 的组成与附加参数

上文回顾:

在上一篇文章中,我主要为大家介绍了有关 IDE 方面的内容。其中主要包括一些我个

人比较喜欢的三个 IDE。本文,我将为各位介绍 GCC 的编译参数以及组成和 Makefile 的使

用方式。

第一节 GCC 的家族成员

总的来说,GCC 应该是一个编译器。可是,为什么我还要在这里介绍 GCC 的家族成

员呢?其实,整套的 GCC 环境并不是由 GCC 构成的,他是由多个包所组成的。这些包的

互相作用产生了 GCC 的开发环境。其中,有一些包是你开发应用程序所必备的基本包。离

开这些包你将无法正常使用 GCC。

GCC 的基本包列表。

GCC 的基本开发环境,主要由一下几个包构成。Binutils,这个是辅助 GCC 的工具包,

里面包含了连接器,汇编器,动态静态库生成程序,等等。GCC,这个包是 GCC 本身。当

然 GCC 包中还包括一下几个包,如 core,java,ada 等,每个包都代表了一种语言。然后,就

是 win32api,mingw-runtime,这个是在 Win32 下使用的标准函数包。如果,你使用的是 Cygwin

或者是在 Unix 环境下,那么这个包就是 GlibC。

所以,由上所述。GCC 的基本包有:binutils gcc glibc/[win32api,mingw-runtime]有了

这些包。你基本能够开始编译应用程序了。

当然,如果说你想要写一个小程序。自然这些包已经够了。但是如果你要写一个较大

的工程。那么,这些包也许就不能很好的胜任你的工作了。因为,对于一个大的项目,需要

编译的文件不只一个,而且还有依赖关系等等。

所以,GCC 中还包括 gmake 包用于管理项目。当然,还有 automake。但是我个人还是

不太喜欢 automake,automake 其实是帮助你自动的管理你的项目,当然实现这个自动也是

比较麻烦的,所以与其用 automake 管理中小型项目,不如用 gmake 自己写个脚本。不过,

automake 通常用于源代码发布的应用,如果在开发时使用会延长开发周期。

Gmake,automake,都是通过编译脚本来批量的编译程序。他们能够更具你所给定的依

赖关系,来自动的判断需要重新编译的源代码,然后编译。这点的确可以帮助开发人员减轻

不少的人力和开发周期。比如,你用 Makefile 管理一个项目,那么在你第一次编译程序以

后,如果你的源代码没有做过任何编辑,那么下次再调用 gmake 的程序时,gmake 就不会

再去一一编译每个文件。而是简单的连接一下主程序,或者什么都不作的退出(这要取决于

你写的 Makefile 脚本)

Page 23: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

但是,对于有些开发人员来说,上面这些包还是不能满足他们的要求。因为他们要调

试程序。所以,GCC 还包括另一个包。那就是 GDB,gdb 是 GCC 开发的,用于跟踪调试的,

命令符型调试器。它的功能还是比较强大的。基本,你能在 VC 下做到的,GDB 也可以。

不过,GDB 的命令还是比较多的。掌握一些基本的调试命令一般就够使用了。

总结

GCC 开发环境包括如下几大包。

binary 基本包 提供基本的汇编器,连接器等

gcc 基本包 各种语言的编译器,包括 C,C++,Ada,Java 等

Win32api,mingwi-runtime/glibc 基本包 系统函数库

Gmake/automake 需要包 管理项目编译的程序

gdb 附加包 调试程序

第二节 GCC 的常用编译参数

同 VC,TC 等编译器不同,GCC 其实是可以很方便的在提示符下编译程序的。GCC 在

提示符下编译程序,并没有如同 VC 那样的冗长而晦涩的编译参数。相反,却有着比 VC 更

灵活且简短的参数。

不得不承认,不懂 GCC 编译参数的人,确实会损失一些 GCC 的强大功能。所以,我

下面简单介绍一下 GCC 的一些基本编译参数。这里,我以 C 编译器为例。

编译二进制代码

$gcc -c yours.c -o yours.o

使用这段指令,GCC 将会把 yours.c 编译成 yours.o 的二进制代码。其中,yours.o 就类

似于 VC,TC 中的.obj 文档。

Page 24: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

编译最简单的小程序。

$gcc -o yours yours.c

通过这条指令,GCC 将会把 yours.c 源代码编译成名为 yours 的可执行程序。当然,您

也可以将 yours.c 改成我们刚才介绍的 yours.o 文件。这样,gcc 将使用编译刚才编译好的二

进制文档来链接程序。这里,格式的特点是,-o 后面是一串文件列表,第一个参数是所编

译程序的文件名,从第二个开始,就是您编译和连接该可执行程序所需要的二进制文档或者

源代码。

编译时将自己的头文件目录设为默认头文件目录

$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o

这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头文件

目录中。这样您将可以使用 #include <your_include.h>来导入头文件。

编译时使用自己的静态库存放目录

$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o

这条指令将会让 GCC 在连接时除了在默认 Lib 存放目录中搜索指定的静态库以外,还

会在 Your_Lib_Files_Document_Path 中搜索。

编译时使用静态连接库

$gcc -lyour_lib -o yours yours.o

这条指令将会让 GCC 在连接时把 libyour_lib.a 中您所用到的函数连接到可执行程序中。

此处注意,GCC 所使用的静态连接库是 lib*.a 格式的。在连接时,只且仅需要提供*的内容

就可以了。

编译时使用优化

$gcc -O2 -c yours.c -o yours.o

Page 25: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

使用优化方式编译程序,其中除了-O2 以外,还有-O3 -O1 等等。他们代表不同的优化

等级。最常用的,是-O2 优化。当然,还有针对特殊 CPU 的优化,这里就不介绍了。

编译时显示所有错误和警告信息

$gcc -Wall -c yours.c -o yours.o

GCC 在默认情况下,将对一些如变量申请未使用这样的问题或者申请了没有给予初始

值的问题忽略。但是,如果使用了-Wall 参数,编辑器将列出所有的警告信息。这样,您就

可以知道您的代码中有多少可能会在其他操作系统下出错的地方了。(用这个指令看看你的

代码有多少地方写的不怎么合适。)

编译连接时,加入调试代码

$gcc -g -o yours yours.c

正如同 VC 有 debug 编译模式一样,GCC 也有 debug 模式。添加了-g 参数编译的可执

行程序比普通程序略为大一些,其中添加了一些调试代码。这些代码将被 gdb 所支持。

连接时缩小代码体积

$gcc -s -o yours yours.o

这个参数,似乎我没有在 Unix 环境下看到过。也不知道具体什么作用。因为有人说

Visual-MinGW 生成的代码小,于是研究了一下她的编译参数,发现 release 模式的编译参数

就加了这一项。貌似编译后的代码的确缩小了很多。

获得帮助

$gcc --help

这条指令从意思上就能看出,获得 gcc 的帮助信息。如果您有什么特殊需要,也许这

个指令能帮上点小忙。

Page 26: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第三节 如何写一个简单的 Makefile

说了半天 Makefile 管理项目,我想现在该说一下如何写了。其实,Makefile 文件总体

还是比较容易写的,基本只要你会使用命令行,就可以写 Makefile。下面我简单介绍一下

Makefile 的构成和书写。

一个输出 HelloWorld 的简单 Makefile

all:

echo HelloWorld

这个 Makefile 代码,运行后将在屏幕上打印一个 HelloWorld。all 其实是类似 C 代码中

的 main 函数。gmake 程序将在运行 Makefile 代码时,首先运行此处的代码。注意,此处 echo

前面的是<tab>。GCC 对空格很敏感的。

添加依赖项的 Makefile

all:depend

@echo I am the main

depend:closeecho

@echo I am the depend

closeecho:

@echo off

这个 Makefile 代码,的作用还是输出句子。不同的是她添加了几个指令块之间的依赖

关系。其中 all 依赖于 depend,depend 依赖于 closeecho。这样,程序在编译时将根据脚本的

依赖关系来判断文件编译的先后顺序。

执行 Makefile

$make -f Makefile

通常情况下,不用-f 参数,make 程序将在当前目录下搜索名为 Makefile 的文件作为需

要执行的文件。而使用-f 将指定 Makefile 的文件名。

Page 27: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

一个完整的 Makefile

all:yours

@echo OK

yours:yours.o

gcc -o yours yours.o

yours.o:yours.c

gcc -c yours.c -o yours.o

更多有关 Makefile 的详细内容请查相关资料。

文外音:

的确,发现了。我这个系列的文章进展的并没有我预期和承诺的那么快。确实挺让我感

到无奈的。不过,幸好你能够理解我。总体来说,本文主要是简单介绍一下 GCC 的一些基

础。因为我发现有许多读者对 GCC 并不是很了解。

说来也挺无奈的,最近发现原来周围有个小人当道。此人姓名我也就隐去了。从去年开

始,就常常在和我聊得比较好的几个女生面前造我的谣。所以,原本应该 9 月该出来的文章

拖延到了 9 月底。说起这个人,我希望大家要以此人为鉴。不要像他那样。

这人自称在硬件方面很行,不过据我所知,他无非就是可以把各种型号的主板和硬件编

号背出来而已。连基本的线程进程都搞不清楚。还成天鼓吹 32bit 的机器是淘汰的机器。不

得不承认,这位满口脏话为人无耻的家伙的确硬件方面挺不错的。但是,我还是觉得做技术

的人不要太追求表面的东西,不要追求过于超前的东西,同时也更要注意自己的品行道德。

也许是年纪大了,发了一些牢骚。希望各位不要建议。不过,事以至次,我也无力挽回

了。

最后感谢各位对我的支持,更感谢那些愿意为我效力的朋友们。同时,如果您有什么问

题或者建议,都可以提出来。为了您能及时准确的得到回复请到 http://blog.csdn.net/visioncat

上发表你的留言。谢谢

STUDIO 软件开发组(SDT)

STUDIO Development Team

北斗星君(黄庠魁)

Page 28: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第四章 跨平台图像显示库——SDL

上文回顾:

在上一篇文章里,我们主要看了一些有关 GCC 编译参数的内容。以及三个主要的 GCC for

Win32 版本的安装与特性。下面我将逐一介绍 GCC for win32 开发库的安装与使用。当然,

这些库都是能够支持多操作系统的。

第一节 与 SDL 第一次亲密接触

SDL,也就是 Simple DirectMedia Layer 是一个针对 声音,键盘,鼠标,遥杆,通过

OpenGL 的 3D 以及 2D 处理的底层跨平台函数库。她主要支持的平台有 Linux, Windows,

Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris,

IRIX, 和 QNX. 。当然,还有一些非官方的支持平台。

总体来说,SDL 对于图像的处理性能还是不错的,而且能在基本不修改代码的情况下,

能支持多平台的编译。这点的确是非常不错的。如果你想开发什么跨平台的游戏之类的,

SDL 确实是一个不错的选择。其次,SDL 是用 C 写的,所以也可以得到很多其他语言的支

持,主要有 Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C,

Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, 和 Smalltalk

SDL 的官方网站是 http://www.libsdl.org 我们可以从她的官网上免费获得其源代码和编

译成功的库。其他的还有一些 Demo,文档,基于 SDL 所扩展出来的库,成功的案例等等

很多 SDL 的资料。

SDL 的使用概览

在正式使用中 SDL 的易用性也是显而易见的。通过一些简单的代码便能够编写出图形

的显示程序。而且,SDL 的编程思想也是很容易理解的。

SDL 的程序代码主要有四部分组成。她们分别是 初始化阶段,程序运行阶段,事件等

待与处理阶段,资源释放阶段。

初始化阶段,主要完成程序的初始化工作。如 SDL 的函数初始化,还有程序自身的一

些初始化操作,如窗口的建立,背景色的设置,等等。程序运行阶段,主要完成程序中所需

要的媒体载入,和显示等,比如窗口的初始化内容的刷新等。事件等待与处理阶段,主要是

用于等待窗口 键盘 摇杆 鼠标等事件然后更具程序所设定的进行相关的操作处理。资源释

放阶段,主要用于释放程序中所用到的系统资源,如 image 图片资源的释放等。

这四个阶段的代码是非常容易实现,而且有一定的格式和方法。所以,相对来说虽然

SDL 的功能强大,但是代码的编写也还是比较清晰和简便的。

Page 29: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

SDL 库的编译与安装

SDL 的安装分为两种,一种为从源码编译出库,然后安装。另一种是直接使用官网上

为我们编译好的 SDL 库。下面我一一介绍不同的安装方式。

我们先来看看从源码编译安装的过程。

我们要从 SDL 的官方网站下载 SDL-1.2.x.tar.gz 。然后从 MinGW 的官方网站上下载

MSYS-1.0.10.exe 和 msysDTK-1.0.1.exe。第一个为 SDL的源代码,第二个和第三个为 MinGW

的 POSIX 接口。如果你准备在 Cygwin 下编译,那么第二,第三个包就不需要下载安装了。

解压缩源码包到一个目录下,然后开启你的 SH,切换到你 SDL 源代码所保存的目录下。

然后输入如下的一组命令。

$./configure

$make

上面两条指令就让你的 GCC 编译出了 SDL。如果你使用的是 MinGW,那么可以将

include,lib,bin 目录复制出来。这里我假设我们复制到 $(SDL) 目录中。如果你使用的是

Cygwin,那么你需要输入如下命令让 Cygwin 自动安装。

$make install

当然,MinGW 也是可以通过这种方式安装的。这样,SDL 将安装入 MinGW 的 MSYS

安装目录中。

你也可以从官方网站上下载已经编译好的开发库。所要是 SDL 的开发

库 SDL-devel-1.2.x-mingw32.tar.gz。将开发包里的东西解压缩到 $(SDL)目录中。

通过以上两种方式,我们就已经将 SDL 的开发环境正常安装到我们的机器上了。

当然,最后别忘记把 SDL.dll 这个文件复制到系统目录下,或者放在环境变量 PATH 所

指向的一个目录中,亦或是你主程序所在的目录下。这样你的 SDL 程序才可以正常运行。

一个简单的 SDL 例子

下面给出一个 SDL 例子程序的源代码,以及他的 Makefile 文件,我们可以从 Makefile

文件中很直观的看到编译程序所需要的参数。

下面是 C 的例子代码

//main.c

#include <stdio.h>

Page 30: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

#include <stdlib.h>

#include <SDL.h>

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

SDL_Surface *screen;

SDL_Event event;

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

SDL_FreeSurface(screen);

Page 31: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

return(0);

}

下面是 Makefile 文件。

#Makefile

SDL_INCLUDE=$(SDL)/include

SDL_LIB=$(SDL)/lib/

all:

gcc -I$(SDL_INCLUDE) -c main.c -o main.o

gcc -L$(SDL_LIB) -o main main.o -lmingw32 -lSDLmain -lSDL

你所双击运行你所编译出来的程序,你将会看到一个类似于如下图所示的窗口。

上面那组代码的结构就是一个比较典型的 SDL 的代码格式。

初始化阶段

SDL_Surface *screen;

SDL_Event event;

Page 32: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

int isRun=1;

SDL_Init(SDL_INIT_VIDEO);

程序运行阶段

screen=SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);

SDL_Flip(screen);

事件等待与处理阶段

while(isRun){

SDL_WaitEvent(&event);

switch (event.type){

case SDL_QUIT:

isRun=0;

break;

}

}

资源释放阶段

SDL_FreeSurface(screen);

Page 33: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

至此,我们有关 SDL 库的简单介绍就到这里了。其实,SDL 还有很多东西。我们将在

后面的章节详细介绍 SDL 的神气功能。

文外音:

感觉自从上一篇文章至今已经过去很久了。其实最近感觉蛮忙的吧。但我也不知道自己

忙点什么。不过这些日子所经历的事情也很多,感悟也很多。但是,心情却被这些事情弄的

很不好。也许正像我所说的,光来到世界,世界却因为黑暗不来接受光,反而弃绝光。可如

今作为一个普通人的我又能怎么样呢?争取我所爱的?还是等待所爱的?我向来不喜欢和

人争,总认为该是我的,总会是我的,不该是我的怎么努力也是无用的。可是如今我却觉得

也许我错了吧。呵呵,不游戏,不抽烟,不喝酒的我看来真的只适合搞搞技术什么的吧。

最后还是感谢各位一直以来的支持。同时,如果您有任何的问题和建议都可以提出来。

为了您能及时准确的获得回复,请到 http://nirvana.cublog.cn 上,或者

http://blog.csdn.net/visioncat 上发表你的留言。谢谢。当然,还要为我那么长时间没来更新表

示歉意。

NERVE 软件开发组(NDT)

NERVE Development Team

北斗星君(黄庠魁)

Page 34: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

第二节 函数库的详细介绍——基本函数

上文回顾:

在上一篇文章中,我们了解的一些 SDL 库的基本知识,以及应用。这一篇文章以及以后的

若干篇文章,我们将对 SDL 的各个函数做更详细的了解。

在上一节中,我们已经了解了 SDL 的安装和基本的使用方法。还给出了编译使用 SDL

程序的源代码。接下来,我将带领各位深入 SDL 其中,逐一介绍 SDL 的各个函数。首先我

们先从基本函数说起。

当你需要在你的程序中使用 SDL 的时候。你首先要做的事情,就是在你的程序中初始化

SDL。这个工作,你可以交由 SDL_Init 函数来做。SDL_Init 函数可以初始化任何 SDL 所支

持的子系统,其中包括图象,声音,摇杆,时钟等子系统。当然,在你使用 SDL_Init 函数

初始化以后,你可以使用 SDL_InitSubSystem 和 SDL_QuitSubSystem 函数来加载和卸载子系

统的。当然啦,你的程序退出前,你必须卸载所有的子系统以释放系统资源。通过调用<

/font>SDL_Quit,可以轻松的卸载掉你所加载的子系统并释放这些子系统的系统资源。

SDL_Init

函数摘要

#include“SDL.h”

intSDL_Init(Uint32 flags);

函数介绍

这个函数是用于初始化 SDL 的,你必须在调用其他的 SDL 函数之前调用该函数。其中

flags 的参数和意义如下。当你需要初始化多个子系统的时候,可以用把这些参数或起来。

< /tbody>

SDL_INIT_TIMER 始化 计时器子系统

SDL_INIT_AUDIO 始化 音频子系统

SDL_INIT_VIDEO 始化 视频子系统

SDL_INIT_CDROM 始化 光驱子系统

SDL_INIT_JOYSTICK 始化 摇杆子系统

Page 35: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

SDL_INIT_EVERYTHING 初始化以上全部的子系统

返回值说明

返回 -1 表示错误,返回 0 表示初始化成功。

SDL_InitSubSystem

函数摘要

#include“SDL.h”

intSDL_InitSubSystem(Uint32 flags);

函数介绍

在你通过 SDL_Init 为 SDL 初始化以后,你可以通过 SDL_InitSubSystem 函数来初始化

那些没有被初始化的子系统。其中 flags 的参数定义和 SDL_Init 的一样。

返回值说明

返回 -1 表示错误,返回 0 表示初始化成功。

SDL_QuitSubSytem

函数摘要

#include“SDL.h”

voidSDL_QuitSubSystem(Uint32 flags);

函数介绍

SDL_QuitSubSystem函数可以卸载你曾经通过 SDL_Init 或者 SDL_InitSubSytem函数加

载的子系统,其中参数 flasgs 的定义和 SDL_Init 中的定义一样。

SDL_Quit

函数摘要

#include“SDL.h”

voidSDL_Quit(void);

Page 36: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

函数介绍

SDL_Quit 函数可以卸载所有你所加载的子系统,并且释放这些子系统所占用的资源。

这个函数一般是在程序退出以前调用的。< /font>

SDL_WasInit

函数摘要

#include“SDL.h”

Uint32SDL_WasInit(Uint32 flags);

函数介绍

SDL_WasInit 函数,允许你查看你所加载的子系统有哪些。其中 flags 的内容为你所要

检查的子系统。

返回值说明

函数返回一组你所要检查的子系统加载情况的说明。是几个 bit 字的或。你可以用与操

作来逐一检查你所要检查的子系统是否被加载。

下面给出一组关于以上函数的 Demo 代码,以及他的 Makefile。

SDL_General_Demo.c 的 C 代码

& nbsp;

//NERVE Development Team

//SDL_General_Demo.c

#include <stdio.h>

#include <stdlib.h>

#include <SDL.h>

#define NOTE(msg) printf("NOTE: %s\n",msg)

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

SDL_Init(SDL_INIT_VIDEO);

NOTE("load video subSystem");

SDL_InitSubSystem(SDL_INIT_AUDIO);

NOTE("load audio subSystem");

if(SDL_WasInit(SDL_INIT_EVERYTHING)&SDL_INIT_AUDIO){

Page 37: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

NOTE("AUDIO SubSystem was loaded");

}else{

NOTE("AUDIO SubSystem is unloaded");

}

SDL_QuitSubSystem(SDL_INIT_VIDEO);

NOTE("unload video subsystem");

if(SDL_WasInit(SDL_INIT_VIDEO)){

NOTE("VIDEO SubSystem was loaded");

}else{

NOTE("VIDEO SubSystem is unloaded");

}

SDL_Quit();

NOTE("unload any subsystem of SDL");

return(0);

}

编译 SDL_General_Demo.c 的 Makefile 文件。

& nbsp;

#Makefile

CC=gcc

SDL_INCLUDE="D:/SDL/include"

SDL_LIB="D:/SDL/lib"

all:SDL_General_Demo.o

$(CC) -L$(SDL_LIB) -o Demo SDL_General_Demo.o -lmingw32 -lSDLmain -lSDL

SDL_General_Demo.o:SDL_General_Demo.c

$(CC) -I$(SDL_INCLUDE) -c SDL_General_Demo.c -o

SDL_General_Demo.o

按照以上两个文件的编译,我们可以得到一个名为Demo的可执行程序。当你执行 Demo

以后。你将在 Demo 所在的文件夹内找到一个名为 stdout.txt 的文件。他是对 标准输入输出

Page 38: GCC for Win32 开发环境介绍 - cse.seu.edu.cncse.seu.edu.cn/people/shine/docs/GCC_for_Win32_Intro.pdf · gdb MinGW中的调试工具 ... 有安装Cygwin 的机器上运行。还有,如果要切换到windows

的重定向文件,你使用 printf 打印到终端的内容全部保存在这个文件内。下面是我的

stdout.txt 的内容

NOTE: load video subSystem

NOTE: load audio subSystem

NOTE: AUDIO SubSystem was loaded

NOTE: unload video subsystem

NOTE: VIDEO SubSystem is unloaded

NOTE: unload any subsystem of SDL

文外音:

感觉现在的文章更新间隔是越来越长了,不过还是感谢各位对我的支持。我相信,我以

后的文章更新会慢慢的加快节奏的。也同时感谢各位读者的支持和理解。呵呵,感觉一个学

期又结束了,虽然在学期的结尾的时候和某个人发生了些不快。但是,我想我还是大度一点

不和他计较了。同时我也觉得,人生中有很多事情是强求不来的,我们的一切都是早已在我

们诞生以先就已经定下了,不论是我们在世上的疆界还是我们的财富。在上一阶段的时间里,

我曾经充满希望,也曾经绝望过,但是不论何时我都觉得有种无形的力量在我绝望的时候扶

助我,让我不至全然的扑到在地。如今,我真正觉得我曾经的绝望是如此可笑无知,因他让

我见着希望~。所以,不论我们当前的处境如何绝望,只要抱着信心走在正直的道路上,我

相信我们一定能看到曙光的。

如果你在阅读本文以后有任何的疑问,你可以到 http://nirvana.cublog.cn 或

者 http://blog.csdn.net/visioncat 上提出问题。最后感谢各位对我长久以来的支持。

NERVE 软件开发组(NDT)

NERVEDevelopment Team

北斗星君(黄庠魁)