第6章 常用开发工具 (4学时)
第6章
常用开发工具
6.1 概述
Linux开发工作经常是在Linux用户决定共同完成一个项目时 开始的。当开发工作完成后,该软件就被放到Internet站点 上,任何用户都可以访问和下载它。 大多数Linux软件是经过自由软件基金会(Free Software Foundation)提供的GNU(GNU 即 GNU’s not UNIX)公开认 证授权的,因而通常被称作GNU软件。 GNU软件免费提供给用户使用,并被证明是非常可靠和高效的。 许多流行的Linux实用程序,如:C编译器、shell和编辑器都 是GNU软件应用程序。
6.2 gcc编译系统 目前,linux平台上最常用的是C语言,其编译系统是gcc, 能够编译用C, C++等语言编写的程序。
一般来说,系统安装后就已经安装和设定好了gcc。 在shell的提示符下键入gcc v,屏幕上就会显示出目前 正在使用的gcc的版本。
6.2.1 C语言编译过程 C语言程序包括:源文件、头文件、库文件; 在Linux系统中,C/C++程序编译命令是gcc;
当使用gcc时,gcc会完成预处理、编译、汇编和连接;前三步生成目标文件, 连接时把生成的目标文件链接成可执行文件; gcc可以针对不同的源程序文件进行不同处理,文件格式 以文件的后缀来识别,常见的如表6.1所示。
1.预处理阶段
预处理是常规编译之前预先进行的工作,故此得名。 负责读取C语言源文件,对其中以“#”开头的指令(伪 指令)和特殊符号进行处理,如:
a. 将“#include”所指出的文件替代该程序行,有两种格式: #include <文件名> —预处理程序在/usr/include目录下找文件 #include “文件名” —首先在当前工作目录中找,然后到标准目录/usr/include中找; 备注: 使用gcc命令时设置选项,指定查找头文件时要优先搜索的目录。 b. 对C语言源程序中的宏名进行宏替换。 例:#define EOF -1
预处理程序将程序中有EOF的部分以-1取代。
预处理程序对源程序进行“替换”之后,输出的文件就不包 含宏定义、文件包含、条件编译等指令,与源文件功能相同, 而形式不同。宏定义: 1.可以在C程序中:#define name value: 如: #define stuname “Wang” 2.也可以在gcc命令的选项中设置宏定义; 如:gcc –D name=definition 第二种方式的优先级高于第一种方式,可以覆盖源 文件中的定义。
gcc命令的使用
在Linux系统中,C/C++程序编译命令是gcc,例如: $ gcc [options] [filenames]
1.其中filenames为所要编译的程序源文件;2.执行完成后,生成默认的可执行文件a.out;
3.[options]部分可以有较多取值,如:预处理选项、编译选项、优化选项、连接选 项,使得gcc命令的功能很多。
【例】gcc预处理选项 $ cat hello.c #include “test1.h” #define var1
“call for help”宏定义 main() { printf(“display –D variable %s\n”, DOPTION); printf(“display overwrite var1=%s\n ”, var1); printf(“hello, everyone!\n”); }
假设上述程序中,头文件test1.h存放在目录/temp中,且头文 件里定义了变量var1,下面用gcc命令对上述C程序进行编译, $ gcc hello.c 则会提示找不到头文件test1.h,以及DOPTION未定义;
因此,编译的时候要在gcc命令的选项里面,加入头文件 test1.h的路径:
$ gcc –I /temp hello.c此时,会提示: 变量var1重定义、DOPTION未定义
在gcc命令的选项里加入对DOPTION的宏定义: $ gcc –I /temp –D DOPTION=”test” –E hello.c 只做预处理,比如:宏替换,用参数的取值替代宏名; 不做编译,将结果显示在标准输出上。
main() { printf(“display –D variable %s\n”, “test”); printf(“display overwrite var1=%s\n ”, “call for help”); printf(“hello, everyone!\n”); } 此时,若要用gcc命令编译并执行hello.c程序,则去掉-E选项, 编译完成后,生成默认的可执行文件a.out $ a.out display –D variable test display overwrite var1=call for help hello, everyone!
2.编译阶段
对预处理之后的输出文件进行词法分析、语法分析,试图找出 所有不符合语法规则的部分。 并根据问题给出错误消息,终止编译,或给出警告。 当确定程序符合语法规则后,将其“翻译”为功能等价的中间 代码,或汇编代码。
3.汇编过程
汇编程序(Assembler)把汇编代码翻译成目标机器代码; 包括代码段和数据段等部分,前者包括程序指令,后者存放各 种全局或局部变量。
2.gcc的编译程序选项常用选项及其作用
选项 格式-c -S -o file -g -v
功
能
只生成目标文件,不进行连接。用于对源文件的分别编译 只进行编译,不做汇编,生成汇编代码文件格式,其名与源 文件相同,但扩展名为.s 将输出放在文件file中。如果未使用该选项,则可执行文件 放在a.out中 指示编译程序在目标代码中加入供调试程序gdb使用的附加 信息 在标准出错输出上显示编译阶段所执行的命令,即编译驱动 程序及预处理程序的版本号
【例】gcc编译选项$ cat m1.c #include<stdio.h> main() { int r; printf(“enter an integer\n”); scanf(“%d”,&r); square(r); return 0; } $ cat m2.c #include<stdio.h> int square(int x) { printf(“square =%d\n”, x*x); return (x*x); }
若直接编译m1.c文件:gcc m1.c,则会提示: m1.c文件中的main函数调用的square函数,但没有事先定义和 声明。因此需要使用-c选项
$ gcc –c m1.c $ gcc –c m2.c $ gcc m1.o m2.o –o m12 $ m12 enter an integer 6 square=36
-c选项表示: 只生产目标文件(后缀为.o,参 见表6.1),而不进行连接,可 用于对源文件分别编译。
4.连接阶
段
连接程序(Linker)要解决外部符号访问地址问题,即: 将一个文件中引用的符号(如:变量、函数调用),与 该符号在另外一个文件中的定义连接起来,最终成为操作 系统可以执行的可执行文件。
…… 此处隐藏:1312字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [稿件大全]不忘初心牢记使命 党课演讲稿,忠诚干
- [稿件大全]节能环保演讲稿:给生命关怀
- [稿件大全]《麦田里的守望者》读书报告演讲稿
- [稿件大全]“五四”青年节演讲稿_弘扬“五四精神
- [稿件大全]建国70周年演讲稿:践行新使命 续航新
- [稿件大全]五四演讲稿:弘扬“五四精神”做一名逐
- [稿件大全]建国70周年演讲稿:我和我的祖国
- [稿件大全]高三演讲稿_用梦想点燃青春
- [稿件大全]关于禁毒演讲稿:“健康人生,绿色无毒
- [稿件大全]五四精神演讲稿:继续前行
- [稿件大全]党课演讲稿:以更好的精神状态肩负起新
- [稿件大全]护士演讲稿_做有温度的人,做有意义的
- [稿件大全]书记抓基层党建述职评议大会讲话稿
- [稿件大全]高三成人礼演讲稿:遇见最美的你
- [稿件大全]“五四”青年节演讲稿_传承五四精神 放
- [稿件大全]五四运动一百周年演讲稿:什么是“五四
- [稿件大全]纪念五四运动100周年演讲稿三篇
- [稿件大全]岗位竞选演讲稿
- [稿件大全]演讲稿:敢于担当 为命运掌舵
- [稿件大全]争先创优演讲稿:五心服务铸就五星梦想
- 毕业感言:六年相伴(合集16篇)(毕业
- 毕业三十年的聚会感言(共18篇)(毕业
- 转职能转方式转作风发言稿(精选9篇)(
- 教师比赛开场白(通用16篇)(教师比赛
- 婚礼上新人家长致辞(锦集15篇)(婚礼
- 秘书专业实习的自我总结(合集20篇)
- 高速公路票证员个人工作总结(锦集14篇
- 会计毕业实习报告总结及体会(通用12篇
- 收费站监控员年度个人总结(精选15篇)
- 秋季初中新学期开学第一周国旗下讲话稿
- 支部讨论会主持词(精选16篇)(支部讨
- 小朋友主持词开场白(通用19篇)(小朋
- 小班下学期保育员个人工作总结(精选12
- 工会主席在工会工作会议上的讲话(整理
- 幼儿园衔接班家长会发言稿(锦集18篇)
- 剪刀手爱德华台词(整理6篇)(剪刀手爱
- 国旗下的新年寄语讲话演讲稿(精选18篇
- 物业公司物管员个人总结(共16篇)(物
- 学校晚会主持串词(精选10篇)(学校晚
- 婚礼新人入场主持词(通用15篇)(婚礼




