- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GCC基础
GCC编程基础;GCC(GNU Compiler Collection,GNU编译器套装)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,并支持处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。;GCC的外部接口长得像一个标准的Unix编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连结器以制造可执行的程序。;每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。编译器最佳化与静态程序码解析技术在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。
几乎全部的GCC都由C写成,除了Ada前端大部分以Ada写成。;前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递回语法解析器。;一般编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数值重编码等。;GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。;1) [root@rhel5 Server]# rpm -ivh kernel-headers-2.6.18-53.el5.i386.rpm
2) [root@rhel5 Server]# rpm -ivh glibc-headers-2.5-18.i386.rpm
3) [root@rhel5 Server]# rpm -ivh glibc-devel-2.5-18.i386.rpm
4) [root@rhel5 Server]# rpm -ivh libgomp-4.1.2-14.el5.i386.rpm
5) [root@rhel5 Server]# rpm -ivh gcc-4.1.2-14.el5.i386.rpm
6) [root@rhel5 Server]# rpm -ivh libstdc++-devel-4.1.2-14.el5.i386.rpm
7) [root@rhel5 Server]# rpm -ivh gcc-c++-4.1.2-14.el5.i386.rpm ;//test.c
#include stdio.h
int main(void)
{
printf(Hello World!\n);
return 0;
};先输入“gcc test.c”,在默认情况下,C编译器将生成一个名为 a.out 的可执行文件,输入“./a.out”后,会显示“Hello World”。
每一次编译程序时,新的a.out将覆盖原来的程序。你无法知道是哪个 程序创建了a.out。我们可以通过使用-o编译选项,告诉gcc我们想把可执行文件叫什么名字。我们将把这个程序叫做test,我们 可以使用任何名字,因为C没有Java那样的命名限制。
输入“gcc test.c –o test”,则直接生成“test”的文件,输入“./test”即可。;实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。;gcc -E test.c -o test.i 或 gcc -E test.c
可以输出test.i文件中存放着test.c经预处理之后的代码。打开test.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdi
文档评论(0)