- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 秋冬季常见传染病预防 ppt课件.pdf
- GB 55009-2021 燃气工程项目规范.pdf
- 液体石油产品烃类的测定-荧光指示剂吸附法(GB-T11132-2008).ppt
- 上海市病媒生物密度控制水平评估技术方案.doc VIP
- 高空作业车售后服务方案.docx
- 2024-2025学年河北省沧州市泊头市第一中学高二(上)月考物理试卷(9月)(含答案).docx
- 自-机械制造技术基础课程设计说明书 .doc VIP
- 53个经典病例分析及答案.doc VIP
- [职高 对口升学] 2021年重庆高职分类考试 文化素质测试 真题.pdf VIP
- 电子技术基础数字部分(第7版)康华光习题解析.pdf
文档评论(0)