Linux操纵系统环境下的C程序开发技术.ppt
《Linux操纵系统环境下的C程序开发技术.ppt》由会员分享,可在线阅读,更多相关《Linux操纵系统环境下的C程序开发技术.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五讲 Linux操作系统环境下的C程序开发技术,Linux系统及程序设计,韦 勇 信息安全教研室 ,主要内容,编译器GCC简介 编译器GCC使用 make工具使用 程序调试,教学要求,理解GCC概念; 掌握GCC使用方法; 学会编写makefile; 掌握GDB调试方法。,GCC简介,名称: GNU project C and C+ Compiler GNU Compiler Collection 管理与维护 GNU项目,GCC简介,GCC能工作在多种平台上 Intel x86(Linux, Windows) Alpha(Linux) PowerPC(AIX) Sparc(Solaris)
2、GCC可以编译多种语言 C C+ Objective-C(标准C的派生) Fortran Java Ada,GCC简介,C语言编译过程 预处理阶段(Preprocess) “#”开头的指令(伪指令/宏指令) 和特殊符号进行处理。 编译阶段(Compile) 预处理之后的输出文件进行词法分析和语法分析 汇编过程(Assemble) 把汇编语言代码翻译成目标机器代码 连接阶段(Link) 解决外部符号访问地址问题(库函数),GCC的使用,gcc 选项 输入文件 输入文件包括源程序文件、编译中间文件等 如果没有指定选项,Linux下生成的可执行文件是a.out gcc的选项主要分为四组: 预处理选项
3、 编译选项 优化选项 连接选项,GCC的常用选项,GCC的常用选项,GCC的常用选项,GCC文件扩展名规范,使用gcc编译代码,源代码,示例源程序hello.c #include int main(void) printf(hello gcc!rn); return 0; ,生成预处理文件,$gcc E hello.c o hello.i,预处理文件hello.i的部分内容 . extern void funlockfile (FILE *_stream) ; # 679 /usr/include/stdio.h 3 # 2 hello.c 2 int main(void) printf(he
4、llo gcc!n); return 0; ,生成汇编文件,$gcc S hello.c o hello.s,汇编文件hello.s的部分内容 . main: pushl%ebp movl%esp, %ebp . addl$16, %esp movl$0, %eax leave ret .,生成二进制文件,生成目标文件 命令: $gcc c hello.c o hello.o 生成可执行文件 命令: $gcc hello.c o hello 运行程序 $./hellohello gcc!,编译多个文件,编译多个文件,目录结构(1) 编译命令 $ gcc my_app.c greeting.c
5、o my_app 目录结构(2) 编译方式(1) $gcc my_app.c functions/greeting.c o my_app -I functions,编译多个文件,目录结构(2) 编译方式(2) 分步编译 命令: 1、$gcc -c my_app.c -I functions 2、$gcc -c functions/greeting.c 3、$gcc my_app.o greeting.o o my_app 思路: 编译每一个.c文件,得到.o的目标文件; 将每一个.o的目标文件链接成一个可执行的文件;,使用make工具,适用场合: 多个文件组成的软件项目 基本格式: 目标:欲生
6、成的目标文件 依赖项:生成目标需要的文件 原理: 判断依赖项是否为最新,否则,生成新的目标,目标:依赖项列表 (Tab缩进)命令,使用make工具,make工具的使用格式: make 命令选项 命令参数 通常使用make就可以了,make会寻找Makefile作为编译指导文件;,使用make工具,Makefile示例,使用make工具,目标的依赖关系,使用make工具,target:$OBJ gcc -o target clean: rm install: remove: ,Makefile实例,调试,静态调试 在程序编译阶段查错并修正错误; 主要为语法错误: 输入错误; 类型匹配错误; 排错
7、方式: 利用错误、警告信息,并结合源文件环境排错,静态调试举例,动态调试: 在程序运行阶段差错并修正错误; 主要错误类型: 算法错误; 输入错误; 排错方式: 利用调试工具定位并修正错误;,静态调试举例,静态调试举例,分块编译 greeting.c $gcc -g -Wall -c functions/greeting.c -g:将调试信息加入到编译的目标文件中 ; -Wall:将编译过程中的所有级别的警告都打印出来 ; 无错误 my_app.c $gcc -g -Wall -c my_app.c -Ifunctions 参数含义同上 错误信息:,静态调试举例,错误信息: 错误记录格式: 文件
8、名:行号:错误描述,my_app.c: In function main: my_app.c:6: n undeclared (first use in this function) my_app.c:6: (Each undeclared identifier is reported only once my_app.c:6: for each function it appears in.) my_app.c:9: parse error before greeting my_app.c:6: warning: unused variable name,静态调试举例,分析、定位错误(警告)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 操纵 系统 环境 程序 开发 技术
限制150内