linux基础4-gcc.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux基础4-gcc

LINUX基础-gcc GCC的简介 GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。 GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及其他语言。 GCC编译 C和C++编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking 四个步骤 1.预处理阶段 预处理程序(Preprocessor)读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理。 伪指令主要包括文件包含、宏定义和条件编译指令。 2.编译阶段 编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法分析,试图找出所有不符合语法规则的部分。在确定各成分都符合语法规则后,将其“翻译”为功能等价的中间代码表示或者汇编代码。 3.汇编过程 汇编程序(Assembler)把汇编语言代码翻译成目标机器代码的过程。 4.连接阶段 将一个文件中引用的符号(如变量或函数调用)与该符号在另外一个文件中的定义连接起来,从而使有关的目标文件连成一个整体,最终成为可被操作系统执行的可执行文件。 连接模式分为静态连接和动态连接。 C语言编译过程 gcc文件扩展名规范 GCC基本编译选项1 -c : 编译或汇编源文件,但是不作连接。缺省情况下,gcc通过`.o`替换源文件名后缀`.c`, `.i`, `.s`等,产生目标文件名,可以使用-o选项选择其他名字 -S : 编译后即停止,不进行汇编,对于每个输入的非汇编语言文件,输出文件是汇编语言文件。 -E : 预处理即停止,不进行编译,预处理后的代码送往标准输出 -o : 指定输出目标文件。若没有该选项,缺省输出的可执行文件为a.out GCC基本编译选择2 -g : 在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb来进行调试 -O[0、1、2、3] :对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。 -D :宏定义, 一般格式-Dname=value,若vlaue为空缺省为1 实验1 编写打印”hello world”的程序, 分别使用-E –S –c选项查看效果 用#if #ifdef #ifndef 等配合-D编译选项, 进行编译, 查看不同效果 GCC基本编译选择3 -Wwarning :允许产生warning类型的警告,warning可以是:main、unused等很多取值,最常用是-Wall,表示产生所有警告。如果warning取值为error,其含义是将所有警告作为错误(error),即出现警告就停止编译。 -Idir :在编译源程序时增加一个搜索头文件的额外目录 dir,即include增加一个搜索的额外目录。 -Ldir :在编译源文件时增加一个搜索库文件的额外目录dir -llibrary :在编译链接文件时增加一个额外的库,库名为library.a 实验1 1、创建三个文件,main.c hello.c hello.h。main.c中调用print()函数。print()函数定义在hello.h中, 实现在hello.c中,编译出应用程序,并运行。 2、在当前目录下,新建目录inc, 将hello.h移动inc目录中,再次编译,并运行 编译库 链接库 动态链接库 运行时加载,用完释放。“时间换空间”。平时存在硬盘中。好处:节省内存,易于更新。动态库一般以.so结尾。 静态链接库 在编译时连接好的 运行快 “空间换时间”。静态库文件的扩展名一般为.a 编译静态库 生成目标文件:gcc -c hello.c 归档: ar -rc libhello.a hello.o ar命令归档,格式为ar -rc lib[name].a name.o…… 连接库: gcc main.c –o proc –L./ -lhello -L指定库的路径。即在当前路径下,也不可以省略,因为它默认搜索系统库。 -lhello l表示连接,由于所有的库文件都是以lib开头,所以省略。在此libhel

文档评论(0)

牛X文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档