GCC for Win32开发环境介绍


GCC for Win32开发环境介绍(1)


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

第一节GCC家族概览


GCC是一个原本用于Unix-like系统下编程的编译器。不过,现在GCC也有了许多Win32下的移植版本。所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西。所以,我希望通过这章的叙述,让你——一个Windows开发者对GCC这一个优秀的编译器有一个大概的了解。


历史

GCCGNU公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC以经是一个包含众多语言的编译器了。其中包括C,C++,Ada,Object CJava等。所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。也就是GNU编译器家族 的意思。当然,如今的GCC借助于他的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。

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


Windows下的GCC家族


起初,GCC是用于Unix,Unix-like系统的编译器。不过,现在Windows下也出现了GCC的稳定移植版。这要感谢Internet上众多程序员的共同努力。

如今,在Windows下比较流行的GCC移植版主要有三个。他们是MinGW,CygwinDjgpp。虽然,Djgpp是应用于DOS系统的,考虑到windowsDOS的兼容,所以也将Djgpp纳入其中了。

总体来说,MinGWCygwinDjgpp各有特色,针对不同的应用场合,可以选择不同的移植版来满足需要。MinGW这个系列的移植,主要方向是让GCCWindows移植版能使用Win32API来编程。而Cygwin的目标是能让Unix-like下的程序代码在Windows下直接被编译。至于Djgpp,则是想让DOS下也能用上GCC
所以,对于开发人员不同的需求。选择合适的移植版会让工作变得轻松而高效。


本书的GCC


我个人对GCC的移植版都非常喜欢。不论是MinGW还是Cygwin,亦或是Djgpp。在本书中,除了特殊说明以外,所述的内容适合所有这三种移植版。
不过,考虑到现在在Windows下用的比较多的是MinGW系列。再加上MinGWCygwinDjgpp安装和使用更为简便。所以,建议读者学习时还是使用MinGW



第二节 入乡随俗的MinGW


简介

MinGWMinimalistic GNU for Windows的缩写。她是一个建立在GCCbinutils项目上的编译器系统。和其他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

win32API函数头文件和连接库

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下的开发人员,我想这个应该不是什么问题了。
在一切都选择好以后。这个程序就开始从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提供了一个比较健全的安装程序。


使用


在安装目录下,运行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 Win32IDE。同时,从这一章开始,我将向各位读者做一个小小的要求。那就是,希望你们能够将自己对这篇文章感到的不足告诉我,我将随时修改以发表的内容,以适合广大读者的要求。如果各位有什么想法或者意见,疑惑。希望您能到http://blog.csdn.net/visioncat上提出。




上文回顾:

在上文中,我们了解的windows下的GCC编译器。这一章我们将来看IDE的介绍了。在此,我还要为各位表示抱歉,因为那么久才写出这篇文章。


GCC for Win32开发环境介绍(2)


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


第一节IDE for GCC概览


IDE,即Integrated development environment,也就是综合开发环境。对于习惯使用VCwindows程序员来说,在windows下,GCCIDE也许就比较陌生了。所以,想通过这一章简单介绍一下GCC所使用IDE

GCCIDE是什么?

IDE,也就是 综合开发环境 。她是为了便于程序员开发,管理项目的软件。对于C/C++来说,她主要包括四个部分。代码编辑器,编译连接器,调试器和工具库。而GCC本身就包含了编译连接器,调试器和工具库。所以,严格的说,GCCIDE主要功能就是一个代码编辑器,是用于编写代码的软件。

所以,从上面我们可以看到一个问题,那就是支持工具库的不是IDE,而是编译器。如果你使用不同的IDE开发项目,只要你使用的编译器是相同的,那么她就能支持相同的工具库。

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

许多GCCIDE,毕竟不是商业化制作的,因此很多地方都有不足的地方。下面是我个人认为不错的几个IDE

Dev-C++,这个IDE可谓是专门为GCC所设计的IDEVisual-MinGW,一个模仿VC6.0界面的IDE。最后是最近最火的Code::Blocks,由于也是最近接触,所以也不是太了解,不过,给人的第一印象是,特别像VC.Net的界面。

总体来说,各个IDE都有其自身的特点。对于初学者,Dev-C++比较不错,因为各种工具库基本都有为Dev-C++设计的安装包。对于从VC转形到GCC的人来说,Visual-MinGW是一个不错的选择,因为据我所知,大家熟悉和喜爱的还是VC6.0居多,因此模仿VCVisual-MinGW是一个不错的选择。对于打算用GCC开发项目的人来说,Code::Blocks的确会成为你的最爱,因为她的项目管理实在是太优秀了。其实,每个人都会从中找到适合自己的IDE

本书的IDE

本书使用哪种IDE呢?其实,本书不是专门为哪种IDE所写的。因此,本书所写的都是针对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这个包,这个也是我建议初学者安装的包。如果,你在上一章以后,已经安装了某个GCCwindows移植版,那么你可以选择Dev-C++ executable only这个包。如果你想研究一下Dev-C++的代码,并且对Delphi有所了解,那么Dev-C++ source code是你唯一的选择。

下面我对Dev-C++ executable only的安装方式进行说明。而Dev-C++ with MinGW/GCC的安装和她差不多,只是可以省去后面配置编译器的问题。

安装

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

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

这个是许可证界面,选择I Agree。感觉现在大家用盗版用多了,对于许可证都不关心了,可是我想作为一名开发者,应该对许可证的内容重视一下,毕竟你的软件也是要被人使用的。

这个是安装选项界面。其中,你可以选择你所要安装的内容和安装的一些选项,比如是否关联文件等。如果你下载的是Dev-C++ executable only,那么你将无法使用Mingw compiler system(binaries,headers and libraries)这个选项,因为这个安装文件中没有包含这个。

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

这个界面是询问你是否为windows上的所有用户安装Dev-C++。这里,我选择 否。如果你想让本地机上,每个用户都可以使用Dev-C++,那么你可以选择 是。

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

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

这个是询问你是否要Dev-C++提供函数补全功能,她将从头文件中读取函数头,然后为你补全。但是要消耗一定的CPU时间。如果,你的机器还可以的话,并且需要此功能那么你可以尝试一下。

至此,我们的Dev-C++算是安装成功了。如果,下载的是Dev-C++ with MinGW/GCC,那么后面的内容你可以不关心了。因为,你的IDE环境已经全都配好了。如果不是,那么您还需要自己安装编译器。

配置编译器

按照我第一章所介绍的,安装好某一个GCC移植版编译器,可以是MinGW,也可以是Cygwin。假设,您安装的目录为$(GCC),那么请将如下路径添加到系统变量PATH后。

$(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

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这个项目采用何种编译方式。0windows窗口程序,1为控制台程序,2为静态连接库,3为动态连接库。

IsCpp

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

Compiler

变量是编译器参数

Linker

变量是连接器参数

Name

变量是项目的名称

ProjectIcon

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

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

//MyProjectC.txt

#include <stdio.h>

#include <stdlib.h>

#include "myProject.h"

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

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

return(0);

}



//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上提出。谢谢。


上文回顾:

在上一篇文章中,我们了解的IDEDev-C++。这篇文章中,我将带领各位继续我们的IDE之旅。继续介绍Visual-MinGWCode::Blocks。希望这些IDE能给各位在工作和学习中带来便利。



GCC for Win32开发环境介绍(3)


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


第三节 最脸熟的Visual-MinGW



简介


Visual-MinGW是一个专门为MinGW所设计的IDE。如果,你曾经用过VC++ 6.0这个IDE,你的第一感觉就是,Visual-MinGWVC++ 6.0非常相似。所以,对于曾经用惯VC的朋友们来说,Visual-MinGW不失是一个好的选择。然而,Visual-MinGW的开发与更新似乎并不积极。因此,还有不足的地方。Visual-MinGW的理念是提供一个高效的,快速的创建代码的IDE


获得与安装


Visual-MinGW可以从他的官方网站http://visual-mingw.sourceforge.net获得。在官方网站上,您将看到有DevelopmentVisual-MinGW两个下载选项。这里,我只以Visaul-MinGW的下载项为例。Visual-MinGW是一个不包含MinGW编译器的安装程序。


安装


首先,从官方网站下载前面所说的安装程序,然后运行。基本的安装步骤和Dev-C++类似。由于没有什么选项。我们这里就不一一举例了。

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

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

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

如果,你安装了MinGW。那么你在这里就可以设置了。我假设,你的MinGW安装在$(MinGW)目录下。那么在Compiler Path前打勾,并将$(MinGW)添加上去。

如此,你的Visual-MinGW就算设置好了。如果,你没有安装MinGW,那么你可以查看第一章的内容。这里,我就不多做介绍了。


配置


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

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


使用


其实,Visual-MinGW的使用方式和VC非常类似。基本熟悉VC的朋友。一定对Visual-MinGW不会陌生的。所以,在这里我就不详细介绍了。不过,可惜的是,Visual-MinGW似乎不能添加自己的项目类型。所以,这也给我们带来了不少不便。





第四节 最新颖的Code::Blocks



简介


Code::Blocks不只是GCC的一个IDE,也可以支持其他的编译器,比如MS-VC,Borland C++等等。所以,总体来说Code::Blocks并不是某个编译器的特属IDECode::Blocks的界面设计很像VC.net的界面。从效果上看的确不错。而且,这个IDE支持插件功能,你可以从他的官方网站上获得这个IDE的插件和相关的帮助。


获得与安装


Code::Blocks你可以从他的官方网站http://www.codeblocks.org获得。在官方网站上,有两种版本下载,一种是带编译器的,一种是不带的,我们可以从文件的体积来分辨这些。这里,我下载的是不带编译器的。当然,带编译器的安装方式也类似。


安装


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

上面是安装的欢迎界面

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

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

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

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

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



配置


在第一次运行Code::Block时,她会询问你所使用的编译器种类。如果不是有特殊要求的话,我这里选择GNU GCC Compiler。如果你一开始选错了也没有关系。

由于,我们安装的是没有编译器的版本。所以,我们这里必须安装编译器,具体的安装方式,可以参照前面的文章。这里,建议安装MinGW。现在我假设你的编译器安装在了,$(MINGW)目录下。

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

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


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

Compiler's installation directory中添加你MinGW的路径,按照上面的定义他应该是$(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-MinGWCode::Blocks我了解并不多。前者是因为并不太喜欢,后者是由于刚出来。不过,还是希望我写的内容对各位有用。当然,我个人的喜好不会影响各位的使用。现在笔者没有使用其中任何一款IDE,笔者现在使用的IDE是我自己架设的,在Windows下我使用的是notepad作为我编写代码的工具,使用Makefile管理项目。所以,各位可以放心的选择各自喜好的IDE。不用担心会不被支持,或者被厌弃。至此,关于IDE的介绍将就到这里结束了。以后我将主要针对函数库本身做详细的介绍,并提供教程。


文外音:


首先,对各位读者表示抱歉。因为原本我准备趁着这次暑假多写一点东西的。可是,并没有预期的那么好。原本这篇文章应该在上个月写出来的。可是,上个月为了练习编程技巧,写了个Sudoku Puzzle,因此没能有时间写文章了。如果各位想要的话,可以问我要。那个程序原本预计一周完成的,可是没想时间远远超出了我的预计。后来,八月初才完成的。本想可以写了吧,没想又发起高烧了,结果久久没能写出文章,对各位对我的期望,我表示非常抱歉。如果你对于文章有什么意见,疑惑或者问题,可以到http://blog.csdn.net/visioncat上提出。我尽我所能将在第一时间回答您。

上文回顾:

在上一篇文章中,我主要为大家介绍了有关IDE方面的内容。其中主要包括一些我个人比较喜欢的三个IDE。本文,我将为各位介绍GCC的编译参数以及组成和Makefile的使用方式。


GCC for Win32开发环境介绍(4)


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


第一节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。但是我个人还是不太喜欢automakeautomake其实是帮助你自动的管理你的项目,当然实现这个自动也是比较麻烦的,所以与其用automake管理中小型项目,不如用gmake自己写个脚本。不过,automake通常用于源代码发布的应用,如果在开发时使用会延长开发周期。

Gmake,automake,都是通过编译脚本来批量的编译程序。他们能够更具你所给定的依赖关系,来自动的判断需要重新编译的源代码,然后编译。这点的确可以帮助开发人员减轻不少的人力和开发周期。比如,你用Makefile管理一个项目,那么在你第一次编译程序以后,如果你的源代码没有做过任何编辑,那么下次再调用gmake的程序时,gmake就不会再去一一编译每个文件。而是简单的连接一下主程序,或者什么都不作的退出(这要取决于你写的Makefile脚本)


但是,对于有些开发人员来说,上面这些包还是不能满足他们的要求。因为他们要调试程序。所以,GCC还包括另一个包。那就是GDBgdbGCC开发的,用于跟踪调试的,命令符型调试器。它的功能还是比较强大的。基本,你能在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文档。


编译最简单的小程序。

$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

使用优化方式编译程序,其中除了-O2以外,还有-O3 -O1等等。他们代表不同的优化等级。最常用的,是-O2优化。当然,还有针对特殊CPU的优化,这里就不介绍了。


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

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

GCC在默认情况下,将对一些如变量申请未使用这样的问题或者申请了没有给予初始值的问题忽略。但是,如果使用了-Wall参数,编辑器将列出所有的警告信息。这样,您就可以知道您的代码中有多少可能会在其他操作系统下出错的地方了。(用这个指令看看你的代码有多少地方写的不怎么合适。)


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

$gcc -g -o yours yours.c

正如同VCdebug编译模式一样,GCC也有debug模式。添加了-g参数编译的可执行程序比普通程序略为大一些,其中添加了一些调试代码。这些代码将被gdb所支持。


连接时缩小代码体积

$gcc -s -o yours yours.o

这个参数,似乎我没有在Unix环境下看到过。也不知道具体什么作用。因为有人说Visual-MinGW生成的代码小,于是研究了一下她的编译参数,发现release模式的编译参数就加了这一项。貌似编译后的代码的确缩小了很多。


获得帮助

$gcc --help

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


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


说了半天Makefile管理项目,我想现在该说一下如何写了。其实,Makefile文件总体还是比较容易写的,基本只要你会使用命令行,就可以写Makefile。下面我简单介绍一下Makefile的构成和书写。


一个输出HelloWorld的简单Makefile

all:

echo HelloWorld

这个Makefile代码,运行后将在屏幕上打印一个HelloWorldall其实是类似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依赖于dependdepend依赖于closeecho。这样,程序在编译时将根据脚本的依赖关系来判断文件编译的先后顺序。


执行Makefile

$make -f Makefile

通常情况下,不用-f参数,make程序将在当前目录下搜索名为Makefile的文件作为需要执行的文件。而使用-f将指定Makefile的文件名。


一个完整的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上发表你的留言。谢谢


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

reg型变量怎么赋值_UiPath变量介绍和使用

1 变量变量主要用于存储数据&#xff0c;它在RPA中扮演重要的数据传递角色&#xff0c;是RPA编程不可或缺的一部分。它包括变量名称和变量的值&#xff0c;变量的值支持多种数据类型&#xff0c;包括从通用值&#xff0c;文本&#xff0c;数字&#xff0c;数据表&#xff0c;时…

深度学习之概述

深度学习的应用场景 1、图像应用&#xff1a; 1.1 大规模(大数据量)图片识别(聚类/分类)&#xff0c;如人脸识别&#xff0c;车牌识别&#xff0c;OCR等。人脸识别算法&#xff1a;① faceID ② faceNet 1.2 以图搜图&#xff0c;图像分割 1.3 目标检测&#xff0…

如何根据对象获取到对应的表名_Excel VBA 常用对象二

下面继续讲解上一节中未讲完的内容&#xff1a;Excel VBA编程中常常使用的那些对象到底是什么&#xff0c;如何在代码中表示它们。Worksheet对象Worksheet对象代表工作表。工作簿中的每个工作表都是一个Worksheet对象&#xff0c;所有Worksheet对象构成了Worksheets集合。我们使…

深度学习之 BP 算法

神经网络的一种求解W的算法&#xff0c;分为信号“正向传播(FP)”求损失&#xff0c;“反向传播(BP)”回传误差&#xff1b;根据误差值修改每层的权重&#xff0c;继续迭代。 BP算法也叫做δ算法。以三层的感知器为例&#xff08;假定现在隐层和输出层均存在相同类型的激活函数…

深度学习之 RBF神经网络

RBF神经网络通常只有三层&#xff0c;即输入层、中间层和输出层。其中中间层主要计算输入x和样本矢量c&#xff08;记忆样本&#xff09;之间的欧式距离的Radial Basis Function (RBF)的值&#xff0c;输出层对其做一个线性的组合。 径向基函数&#xff1a; RBF神经网络的训练…

redis 队列_Redis与Rabbitmq消息队列的区别

将redis发布订阅模式用做消息队列和rabbitmq的区别&#xff1a;可靠性 redis &#xff1a;没有相应的机制保证消息的可靠消费&#xff0c;如果发布者发布一条消息&#xff0c;而没有对应的订阅者的话&#xff0c;这条消息将丢失&#xff0c;不会存在内存中&#xff1b;rabbit…

EasyUI中那些不容易被发现的坑——EasyUI重复请求2次的问题

问题控件&#xff1a;datagrid、combobox、所有能设置url属性的控件 问题版本&#xff1a;1.4.4、1.4.5&#xff08;之前的版本没测&#xff09; 问题如图&#xff1a; 重复请求2次&#xff0c;错误代码如图&#xff1a; 错误问题分析&#xff1a;html加载的时候回请求url加载数…

ElasticSearch Java API

ElasticSearch-Java Client类型 ElasticSearch-TransportClient环境准备 ElasticSearch-TransportClient连接 ElasticSearch-Document APIs ElasticSearch-搜索-原理 ElasticSearch-搜索-问题 ElasticSearch-搜索-问题解决思路 ElasticSearch-搜索-SearchType-类型一 E…

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)

前面, 介绍了DNN及其参数求解的方法(深度学习之 BP 算法),我们知道DNN仍然存在很多的问题&#xff0c;其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸.那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法. 我们…

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)

前面我们说了CNN的一般层次结构, 每个层的作用及其参数的优缺点等内容.深度学习之卷积神经网络(Convolutional Neural Networks, CNN)_fenglepeng的博客-CSDN博客 一 CNN参数初始化及参数学习方法 和机器学习很多算法一样, CNN在进行训练之前也要进行参数的初始化操作. 我们…

Hadoop1.x版本升级Hadoop2.x

引言 随着企业数据化和Hadoop的应用越加广泛&#xff0c;hadoop1.x的框架设计越来越无法满足人们对需求&#xff0c;Apache一直在对Hadoop1.x进行修改&#xff0c;最后推出了新一代的Hadoop2.x。从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看&#xff0c;MapRed…

本页由试用版打印控件lodop6.2.6输出_Visual Basic 6.0 Sirk 迷你版

Visual Basic 6.0 Sirk 迷你版 VB6 Sirk Mini 2019更新1、支持主流操作系统&#xff0c;避免原版安装失败的问题&#xff1a;支持Windows XP、Vista、Win7、Win8、Win10(32位、64位)。2、保留大部分常用功能&#xff0c;避免精简版过度精简&#xff1a;包含原版完整控件&#x…

深度学习之卷积神经网络 LeNet

卷积神经网络典型CNN LeNet&#xff1a;最早用于数字识别的CNNLeNet5&#xff1a;现在常说的一般就是LeNet5AlexNet&#xff1a;2012ILSVRC冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积ZF Net&#xff1a;2013ILSV…

dom4j的读写xml文件,读写xml字符串

百度了一些博客&#xff0c;大同小异&#xff0c;在选取jar包工具的时候大概看了下&#xff0c;大抵是jdom原始&#xff0c;dom4j优秀。于是做了些练习。 参考&#xff1a;http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html 1 package com.test.xml;2 3 import j…

深度学习之数据增强方案和TensorFlow操作

一、数据增强的方法介绍 增加训练数据&#xff0c; 则能够提升算法的准确率&#xff0c; 因为这样可以避免过拟合&#xff0c; 而避免了过拟合你就可以增大你的网络结构了。 当训练数据有限的时候&#xff0c; 可以通过一些变换来从已有的训练数据集中生成一些新的数据&#x…

使用OpenSSL实现CA证书的搭建过程

个人博客地址&#xff1a;http://www.pojun.tech/ 欢迎访问 什么是CA CA,Catificate Authority,通俗的理解就是一种认证机制。它的作用就是提供证书&#xff08;也就是服务端证书&#xff0c;由域名&#xff0c;公司信息&#xff0c;序列号&#xff0c;签名信息等等组成&#…

gdb使用实例

第一篇 概论我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统。Gdb可以调试各种程序&#xff0c;包括C、C、JAVA、PASCAL、FORAN和一些其它的语言。包括GNU所支持的所有微处理器的汇编语言。在gdb的所有可圈可点的特性中&#xff0c;有一点值得注意&#xff0c;…

Linux 监控命令之 netstat

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序&#xff0c;它能提供TCP连接&#xff0c;TCP和UDP监听&#xff0c;进程内存管理的相关报告。 语法 netstat [-acC…

solr 配置

创建 SolrHome(solrCore) 1.解压 solr-4.10.4.tgz 到 /usr/local/solr 2.将 solr-4.10.4/example/solr 下所有文件拷贝到 /usr/local/solrhome (此 solrhome 为自己创建的) solrhome 是 solr 运行主目录&#xff0c;可包含多个 SolrCore 目录SolrCore 目录中包含运行 Solr 实例…

mfc程序转化为qt_10年程序员:我都学过这些语言,2019年开始我再也不是程序员......

为什么学编程2008年&#xff0c;高中毕业的我问一个已经工作两年的亲戚&#xff1a;什么专业工资高&#xff1f;他告诉我&#xff1a;程序员。2008年成都最低工资好像是800元&#xff0c;我的生活费也是800元&#xff0c;据他所说程序员出来的工资是2000&#xff0c;于是开始了…