gcc最早是richard stallman在十几年前编写的针对于c的编译器,意思即为gnu c compiler,后来发展支持ada,c++,java,objective c,pascal,cobol,以及支持逻辑编程的mercury语言,后来其英文原名变为:gnu compiler ollection([1]).除此之外,gcc对于各种硬件平台都提供了完善的支持。
对于程序员来说,编译器的重要性不容置疑,深入了解译器是对工作大有帮助的,所以写下这个学习笔记,希望能借此学到更多东西。 【相关文章:英语四六级考试再次泄题有关部门表示彻查(】
“unix系统开发-gcc参数详解"学习笔记 【扩展阅读:Mandrake 寻求在华合资 与国内企】
我的email: jasonme@emails.bjut.edu.cn 【扩展信息:Linux Integration Gu】
偶然看到这篇文章,边读边记录一下自己的阅读笔记,希望能得到更多收获,也希望能为读这篇文章的人以帮助,建议大家读原文,以得到更多收获,感谢email为pianopan@beeship.com的gg写这篇文章,给我有机会继续了解编译器的参数问题。文中基本上按原本的架构走,对一些细节的地方进行了祥细的解释,有些细节配上了例子,以方便理解,希望能有些帮助。
主要参考文献请见: http://www.chinaunix.net/jh/7/235728.html
一.gcc历史
gcc最早是richard stallman在十几年前编写的针对于c的编译器,意思即为gnu c compiler,后来发展支持ada,c++,java,objective c,pascal,cobol,以及支持逻辑编程的mercury语言,后来其英文原名变为:gnu compiler ollection([1]).除此之外,gcc对于各种硬件平台都提供了完善的支持。
一般的,gcc的编译功能包括gcc(c的编译器),g++(c++的编译器),在编译过程中,一共有四步工作。
1.预处理,生成i文件,c文件编译为.i文件,c++文件编译为.ii文件,它们都为源程序的预处理结果文件.以最简单的hello world程序为例:
*********************************
// test.c #include "stdio.h" #define max 9int main()
{ int a; a=max; printf("hello worldn"); } *********************************用cpp test.c test.i 可得到预处理文件test.i,通过查看该文件,我们可以看到,我们引入的include文件已经被引入处理,define定义的部分已经被完全带入。
2.预处理文件转换成汇编语言,生成.s文件。这一步利用egcs来完成(在mingw标准包中没有见到这个预编译器,所以测试没有成功,将继续测试)
3.汇编变为目标文件,生成.o文件,利用as来完成。
4.连接目标文件,生成可执行程序,利用ld来完成.(后续继续研究ld编译过程。)
二.gcc参数祥解-x language filename
设定文件使用的语言,这样源程序的后缀名无效了,并对gcc后接的多个编译文件都有效。这样如果存在.c与.cpp文件联编会有问题,解决这个问题用到了下一个参数 -x none filename,在下面做介绍。... 下一页