- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章程序开发
UNIX操作系统 第七章 程序开发 什么是编译器? 为什么要使用编译器? 如何使用编译器? 【问题的提出】 Top软件开发公司的开发人员Tom已经选定vi作为自己的常用文本编辑器,并使用vi亲自编写了一个简单的C语言源程序文件“hello.c”保存在其个人目录下。现在,他需要把该源程序转换成为可在Unix下运行的程序。 【问题分析】 C语言源程序需要经过编译和链接这两个过程才能转换成二进制可执行程序。 一般在Unix系统中使用的C编译器是cc(C Compiler的缩写)。由于版权问题,在GNU/Linux中一般不包含有该编译器。在各个Linux发行版本中广泛使用的C编译器名为gcc(GNU cc)。 使用gcc gcc根据源程序的后缀名来决定使用哪一种语言的编译器进行编译工作。 后缀名为“.c”(小写)的文件被gcc认为是C语言的源程序文件。例如: gcc hello.c 使用gcc gcc编译出来的可执行程序默认是a.out。 运行编译出来的程序: ./a.out 选项“-o”的作用是指定一个名字作为生成的二进制可执行程序的名字。例如: gcc –o hello hello.c 使用g++ g++是一个C++版本的gcc编译器。 g++要求C++语言源程序文件带有后缀名“.cc”。例如:g++ hello.cc g++编译出来的可执行程序默认也是a.out。 使用g++ 运行编译出来的程序: ./a.out 选项“-o”的作用是指定一个名字作为生成的二进制可执行程序的名字。例如: g++ –o hw hello.cc 实例 实例 源程序的编译 gcc –o factorial factorial.c main.c -c(只生成目标代码),-o(直接产生可执行文件) 也可用如下方式编译 gcc –c factorial.c gcc –c main.c gcc –o factorial factorial.o main.o 实例 Makefile的编写 对于大型程序,通常由成千上万个模块(子程序)组成,在编写过程中,人们希望对其中某个(些)模块的修改不要导致对整个程序的编译,这也是Makefile的一个主要功用之一。 实例 实例 Makefile中符号说明 $@ 目标文件 $^ 所有的依赖文件 $ 第一个依赖文件 Makefile的最简写法 factorial:main.o factorial.o gcc –o $@ $^ .c.o: gcc –c $ 实例 程序库的链接 若要使用一些数学函数库,则需要在命令行增加编译参数”-lm”,或用“-L库路径”显示指定 gcc –o factorial main.c factorial.c -lm *UNIX操作系统-第七章 程序开发 肖 毅 肖 毅 /*factorial.c */ #include stdio.h #include stdlib.h int factorial (int n) { if (n = 1) return 1; else return factorial (n - 1) * n; } /* main.c */ #include stdio.h #include stdlib.h int factorial (int n); int main (int argc, char **argv) { int n; if (argc 2) { printf (Usage: %s n\n, argv [0]); return -1; } else { n = atoi (argv[1]); printf (Factorial of %d is %d.\n, n, factorial(n)); } return 0; } 上例的Makefile内容 factorial:main.o factorial.o gcc –o factorial main.o factorial.o main.o:main.c gcc –c main.c factorial.o:factorial.c gcc –c factorial.c Makefile简化写法 factorial:main.o factorial.o gcc –o $@ $^ main.o:main.c gcc –c $ factorial.o:factorial.c gcc –c $
文档评论(0)