- 1、本文档共76页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GNU GCC 开发教程 gnu gcc turiol gnu gcc 简介 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统 . 是Linux 的基石,操作系统内核和大部分程序都是gcc 编译的,是Linux下最重要开发工具之一 gcc 早期是c的编译器, 后来发展能支持c,c++和object C,它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada等。 gcc 是一个交叉平台的编译器,目前支持几乎所有主流CPU的处理器平台. gcc 支持的文件格式 gcc 支持源码格式 .c C源程序; .C,.cc,.cxx,.cpp C++源程序; .m Objective-C源程序; .i 预处理后的C文件; .ii 预处理后的C++文件; .s 汇编语言源程序; .S 汇编语言源程序; .h 预处理器文件; 其它格式 .o 目标文件(Object file) .a 归档库文件(Archive file) GCC 组成 gcc 一般安装在 /usr/bin gcc 是一组编译工具的总称,包含如下工作 C 编译器 cc,cc1,cc1plus,gcc C++编译器 c++,cc1plus,g++ 源码预处理程序 cpp,cpp0 库文件 libgcc.a,libgcc_eh.a,libgcc_s.so,ibiberty.a,libstdc++,libsupc++.a gcc的起步 生成一个hello,world程序 gcc hello.c -o hello #把hello.c编译成一个可执行程序 hello gcc hello.c #不指定输出名,生成一个a.out Hello程序 编译hello 可执行程序的构造 任何一个可执行程序从源代码到可执行的二进制程序之中都要经过固定的几步 预编译 (Pre-Processing) 这一步完成对预编译代码的处理 编译(Compiling) 将源代码编译成汇编代码 汇编(Assembling) 将汇编代码汇编成目标文件 链接(Linking) 将目标代码和所需要库的链成一个完整的应用程序 集成开发环境(IDE)自动协助开发完成这几步,如VC++ 在Linux 下,如果使用命令行开发工具(gcc,ld,ar)等,需要用户手工调用这一些命令来完成这几步骤. gcc在构建程序的作用 gcc在构建应用程序里,会调用不同的应用程序完成每一步.因此在开发中,gcc处于一个核心地位.大部分开发只需要调用gcc即可 gcc所做操作 Gcc 调用cpp进行预处理 Gcc 调用cc1进行编译,会生成汇编代码 Gcc 调用as 对汇编代码,生成扩展名为.o的目标文件 Gcc 调用ld 来完成对所有目标文件的链接. 为什么要用gcc 随着Linux的GUI改进,也出现了越来越多的IDE开发环境.象VC++,自动完成各个开发流程 但这一些IDE基本上是基于gcc编译 而且大部分项目,包括嵌入式开发,都是提供gcc命令行开发模式. 因此用gcc开发是Linux和嵌入式开发的必须使用的工具.也是基本功之一 hello 编译过程分析 以下将上述gcc编译过程 ,分成几个步骤单独进行 ,并生成每步运行结果供观察 第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程: #? gcc -E hello.c -o hello.i 下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成 , 。 #? gcc -c hello.i -o hello.o 最后一步是将生成的目标文件链接成可执行文件 #? gcc hello.o -o hello 注意: gcc编译时是对输入文件扩展名是敏感的,即.c一定会当做C代码编译,.cpp,.C …一定会当成C++代码编译,这一点跟大部分Linux程序不一样 gcc的结果输出是后缀名不相关的.只与输出参数相关.这跟一般Linux程序是一样 gcc hello.c -o hello.o#虽然后缀名是.o ,但实际是一个应用程序 gcc 各个编译步骤 多文件gcc 的处理 在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令: gcc foo1.c foo2.c -o foo 在编译一个包含许多源文件的工程时,若只用一条GCC命令来完成
文档评论(0)