GCC编译器
GCC(GUN Compiler Collection):GNU编译器套件。
1.GPL的诞生
背景:长期以来,软件源码作为个人或公司的私有财产受到严格的保密,很难像文学艺术作品一样得到公开的交流。
这样一来,造成软件的重复劳动,在一定意义上制约了软件的发展。
诞生:直到1985年,Richard Stallman提出应将软件源码看成人类共同拥有的知识财富,应该公开的自由交换、修改。
继而提出了GNU计划,并建立了自由软件基金会,同时发布了一份公共授权书(General Public License),即GPL。
注:Stallman为了停止中间人对自由软件的侵害,提出了copyleft授权。
2.GCC的发展
背景:GNU项目计划的主要目的是创建一个名叫GNU(GNU's Not Unix)的完全免费的操作系统,
该操作系统将包括绝大多数自由软件基金会所开发的其他软件,以对抗所有商业软件.
但是,GNU在这方面一直未取得成功,直到Torvalds开发出了Linux系统。
诞生:GNU在操作系统上未取得成功,但成功开发出了几个广为流传的GNU软件,其中最出名的就是GCC。
说明:GCC是历史上最优秀的C语言编译器,而且是copylefted,一旦有用户发现错误,就会通知Stallman,几乎每月都会更新版本。
最重要的是,几乎所有自由软件都是通过它编译的,可以说,它是自由软件发展的基石和标杆。
发展:GCC初期只支持C语言,目前支持Ada、C++、Java、Objective-C、Pascal、COBOL 以及函数式编程和逻辑编程的 Mercury 语言等。
3.GCC的使用
GCC介绍:仅仅是一个编译器,没有界面,必须在命令行模式下使用,通过GCC命令就可以将源文件编译成可执行文件。
检测是否安装:在类 Unix 操作系统中,打开命令提示符(终端),输入:cc --version,如果已经安装,会显示编译器的版本号和版权信息。
生成可执行程序:
cd demo:进入源文件所在的目录,demo为目录名。
gcc main.c:编译源文件,main.c为源文件名。
编译完成后,会在demo目录生成一个a.out的文件,这就是最终生成的可执行文件。
可通过-o参数来自定义文件名,比如:gcc main.c -o main.out,这样生成的文件就是main.out。
也可以通过-o将可执行文件输出到其它目录,例如:gcc main.c -o ./out/main.out。
运行可执行程序:./a.out
./表示当前目录,整条命令的意思是运行当前目录下的a.out程序。
如果程序在其他目录下,运行程序时要带上目录的名字,例如:./out/main.out。
新建空白的源文件:touch main.c。
编辑源文件:gedit main.c。
分步骤编译:
1.编译(compile):gcc -c main.c,结果:生成main.c文件。
2.链接(link):gcc main.o
GCC编译流程:
- 将C语言源程序预处理,生成
.i
文件。 - 预处理后的.i文件编译成为汇编语言,生成
.s
文件。 - 将汇编语言文件经过汇编,生成目标文件
.o
文件。 - 将各个模块的
.o
文件链接起来生成一个可执行程序文件。