- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UNIX下C程序编译和调试
三、UNIX下C程序的编译与调试
3.1 CC编译器
我们用cc来编译生成目标文件,或者生成可执行文件。其实cc可以生成包括.o目标文件、.i预处理文件等在内的中间过程文件。中间过程文件可以由后缀指出其类型:
.c:C源文件。默认处理过程是预处理、编译、汇编。
.C:C++源文件。默认处理过程是预处理、编译、汇编。
.cc:C++源文件。默认处理过程是预处理、编译、汇编。
.cxx:C++源文件。默认处理过程是预处理、编译、汇编。
.m:Objective-C源文件。默认处理过程是预处理、编译、汇编。
.i:经过预处理的C文件。默认处理过程是编译、汇编。
.ii:经过预处理的C++文件。默认处理过程是编译、汇编。
.s:汇编器的源文件。默认处理过程是汇编。
.S:汇编器的源文件。默认处理过程是预处理、汇编。
.h:预处理器需要的头文件。一般不出现在命令行上。
其他后缀的文件将送给连接器(linker)。一般包括:
.o:目标文件。
.a:归档文件(库文件)。
链接过程是上面处理过程的最后一步,除非指定了-c、-S或-E任选项。
一般cc的命令格式如下:
cc [option | filename]
每个任选项由“-”开头,每个任选项分开使用。例如:任选项-dr与任选项-d -r完全不同。下面看一些常用的任选项:
-c 只编译不连接,生成.o文件。编译器对每个源文件输出与该文件相符的目标文件。常常用于编译不包含主程序的子程序文件。
-o outputfile 指定输出文件的名字outputfile。不管指定名字的文件是一个可执行
文件、目标文件、汇编文件还是预处理文件。缺省的输出可执行文件是a.out。如果使用了-c参数,则缺省的输出文件为将源程序文件名的后缀改为.o。
-g 在编译时产生额外的符号表(调试信息),同时将选项-lg传给连接程序(ld)以
使它连接g库(/usr/lib/libg.a),从而使程序可用dbx调试。
-Ipathname 在搜索include文件的目录列表中增加新的目录。除非源程序中指定
了绝对路径,否则cc在编译时将先后在源程序所在的路径、由-I指定的路径和缺省路径/usr/include中寻找源程序中#include的文件。
-llibrary 连接指定的函数库。比如用-lm连接数学库。被连接的库将是库函数路
径中的lib**.so或lib**.a,其中**为-l后的字符串。
-Ldirectory 在缺省的库函数路径(usr/lib)外增加另外的库函数寻找路径。
-temp=directory 指定编译连接时采用目录directory作为存放临时文件的路径。
如不指定,则临时路径为/tmp,当/tmp较小或已经较满时可能无法编译较大的程序,此时需指定temp路径。
-w 在编译时不列出警告信息。
-W 显示额外的警告消息。
-O 优化执行代码,有的编译器还可以通过指定-O1、-O2、-O3等来指定优化的
程度。
-S 在编译步骤后停止,不进行汇编。输出的是一个可由汇编器(assembler)汇
编的文件。一般情况生成的可汇编文件名由源文件(文件名后缀为“.c”、“I”等)的更改为.s为后缀的文件。
-E 在预处理后停止,不进行编译。输出文件是预处理过的代码,并送往标准输
出。
-v 在标准错误输出上显示编译器执行各步骤的命令。也显示版本信息。
-I- 在-I-任选项之前由-I指定的任何目录只用来搜索#include “头文件名”,而
不用来搜索#include 头文件名。命令行中-I-后的-I任选项指出的目录可以用来搜索所有#include包含的头文件。
-Dmacro 定义宏macro,宏macro的值为字符串“1”。
-Dmacro=defn 定义宏macro,其值为defn。所有命令行上的-D任选项在-U任选项
之前处理。
-Umacro 取消宏macro的定义。该任选项在-D任选项之后处理,但在-include任
选项和-imarcos任选项之前处理。
-static 当系统支持共享库链接时,才支持该任选项。该任选项阻止链接器链接
共享库。
-shared 产生一个可共享的目标,其他目标文件链接该目标形成可执行文件。
举例:
1、如果所有程序都在一个文件myprog.c中,那么只需用
cc myprog.c
即可完成编译连接的全过程,所生成的执行文件是a.out。
2、如果源程序由两个文件mymain.c和mysubs.c组成,程序中使用了系统的数学库,我们希望生成的执行文件叫myprog,则编译连接的命令为:
cc mymain.c mysubs.c –lm –o myprog
3
文档评论(0)