gcc常用参数(静动态链接优化调试).doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
gcc常用参数(静动态链接优化调试)

一、编译过程概览 gcc编译器对程序的编译过程有四个阶段:预处理(preprocessing)、编译(com- pilation proper)、汇编(assembly)和链接(linking)。 预处理:对源文件(source file)进行预处理,进行宏定义的替换等。 编译:将进行完预处理的源文件编译成汇编文件(assembly file)。将C源代码编译成汇编语言。 汇编:将汇编文件汇编成目标文件(object file)。 链接:将一个或多个目标文件链接成一个可执行的二进制文件(execute file)。链接的目标文件中有且只有一个main函数,作为可执行文件的开始。 -E 在预处理阶段之后停止,不进行编译。输出是预处理之后的源码,默认发送到标准输出(standard output)。 输入文件格式为.c等,默认输出为标准输出。 -S 在编译阶段之后停止,不进行汇编。输出为每一个指定的未编译的输入文件的汇编代码文件。 输入文件格式为.c、.i等,输出文件格式为.s。 -c 编译或者汇编源文件,不进行链接。输出为每一个源文件的目标文件。 输入文件格式为.c、.i、.s,输出文件格式为.o。 -o filename -o指定输出文件的文件名,如果没有指定-o,则默认输出的可执行文件名是a.out,默认输出的source.suffix的汇编文件名为source.s、目标文件名位source.o。默认的预处理后的源文件输出到标准输出。 main.c gcc –E main.c –o main.i tali main.i gcc –S main.i –o main.s tail main.s ps:gcc –S main.c –o main.s也是可以的。 gcc –c main.s –o main.o gcc main.o –o test ./test ps:gcc –c main.i(main.c) –o main.o gcc main.c(main.i main.s) –o test都是可以的 二、预处理 预处理阶段可以用到的一些选项。 -C 保留文件头注释。 -D name -D name=definition 预定义宏(源文件中不能定义该宏),-D name宏定义的值为1。 -U name 取消宏定义name。按照他们在命令行自左至右的顺序执行-U和-D。 -undef 不预定义任何系统指定和GCC指定的宏,标准的宏仍然预定义。 -I directory 设置头文件(.h)的有哪些信誉好的足球投注网站路径。可以多次使用-I包含多个有哪些信誉好的足球投注网站路径。在有哪些信誉好的足球投注网站头文件的时候,先有哪些信誉好的足球投注网站-I指定的路径,再有哪些信誉好的足球投注网站系统头文件路径。 -M -MM 查看依赖文件。按照make的描述规则输出源文件的依赖,目标文件:所有被包含的文件名。如果在编译时使用到了-I dir,这里也需要指定对应的dir。-MM忽略标准库的依赖。 gcc –D __MYDEBUG__ –E main.c –o main.i tali main.i gcc –MM main.c 三、链接 1.静态库和动态库 库只不过是目标文件的一个集合(一个容器)。如果一些目标文件针对某个给定的问题有相互关联的行为,那么久可以把这些目标文件整合到一个库当中,从而简化应用程序开发人员对这些目标文件的存取和分发。 静态库(archive file,归档文件)由ar或者archive工具创建。在开发人员编译并与库链接后,库中被需要的部分就会被整合到可执行映像中。从应用程序的角度看,应用程序映像已经包含了库中自己所需要的部分,因此它与外部的库不再有关联。 共享库(share file)或动态库也是与应用程序映像链接在一起,但是这种链接分两个阶段完成。第一阶段(应用程序生成阶段),链接器会检查确认应用程序生成所需要的全部符号(函数或变量)在应用程序或库中可用。但是库中相应的部分并不被整合到应用程序的映像中(静态库就是这样直接整合的),而是在第二阶段(运行阶段)由动态加载器将所有需要的共享库中的那部分加载入内存,与应用程序映像动态地链接在一起。这样可以形成更小的映像文件,因为共享库与应用程序映像是独立的。使用共享库节省内存的代价是库必须在运行时解析。明确库中那些部分是需要的,找到这些部分,然后将它载入内存这个过程需要一点时间。 2.链接阶段可以用到的一些选项 -l library 在链接的时候有哪些信誉好的足球投注网站名字为library的库。有哪些信誉好的足球投注网站的目录是标准系统目录加上-L指定的目录。真正有哪些信誉好的足球投注网站的库的文件名为liblibrary.a或者liblibrary.so(即在库名前加lib,后面添加后缀.a或者.so)。.a为静态库,.so为动态库。若两个库同时存在,默认链接动态链接库。 -L directory 为-l添加有哪些信誉好的足球投注网站的目录。 -stati

文档评论(0)

almm118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档