Linux平台C及C++软件开发入门.ppt_第1页
Linux平台C及C++软件开发入门.ppt_第2页
Linux平台C及C++软件开发入门.ppt_第3页
Linux平台C及C++软件开发入门.ppt_第4页
Linux平台C及C++软件开发入门.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux平台C及C+软件开发入门,邢延超 2009年秋季学期,主要内容,Linux操作系统的安装及使用 gcc、gdb及makefile文件 内存分配与函数调用 文件和目录操作 网络编程基础 多线程编程 进程间通信,Linux操作系统,操作系统属性 基本的系统软件,是硬件的第一级扩充 基本特征 多任务并行:分时服务 资源共享 使用用户可以充分地利用系统资源 用户可忽略硬件设备控制细节,只需提出要求 操作系统负责操纵设备以完成所希望的工作 资源分配策略(如根据优先级) 通过控制、调度、分配、管理计算机系统资源,达到对计算机的自动控制,操作系统主要功能,存贮管理 为每个程序分配足够的存贮空间 C

2、PU管理 为程序分配优先级 采用一定调度方法,以时间片轮转方式轮流占用CPU 设备管理 控制外部设备的操作 在多个作业间分配设备 独占设备,如打印机 按一定策略轮流分配给用户使用 共享设备:磁盘阵列 文件管理 文件的建立、删除、读取、或写入等方面的服务 进程与线程管理、调度等,Linux的发展,1991年8月,核心由25岁的芬兰大学生Linus Torvalds发布 Linux=Linus+Minix(Linux编写的类似Minix的系统) MinixMini UNIX,约300MB(还有Idris,Coherent,Uniflex等) 都是重新发展的,并没有使用任何AT #define; e

3、tc gcc -s 不进行汇编,只生成汇编语言 某些代码直接就是用汇编写的 gcc -c 将原文件编程.o文件(即二进制文件) 仍然不可执行,为什么? gcc -o 指定输出文件的名字,重新命名 不加-o,输出a.out,makefile - 1,“自动化编译”,提高效率 写好后,只需调用make,整个工程完全自动编译 大多数的IDE都有这个命令 Delphi的make Visual C+的nmake Linux下GNU的make Make工具最主要也是最基本的功能 通过makefile文件来描述源程序之间的相互关系 自动维护编译工作 makefile 文件需要按照某种语法进行编写 说明如何编

4、译各个源文件并连接生成可执行文件 定义源文件之间的依赖关系 -f选项 缺省文件名为Makefile或makefile make f MyMakefile,makefile - 2,#It is a example for describing makefile prog : filea.o fileb.o filec.o cc filea.o fileb.o filec.o -LS -o prog filea.o : filea.c a.h defs cc -c filea.c fileb.o : fileb.c b.h defs cc -c fileb.c filec.o : filec.c

5、 c.h cc -c filec.c 注1:一定要用Tab键 注2:目标vs依赖关系(最小重建),makefile - 3,Makefile中的宏定义 OBJECTS= filea.o fileb.o filec.o LIBES= -LS prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog GNU make 的主要预定义变量 $*:不包含扩展名的目标文件名称 $+:所有依赖文件(可重复),空格分开,以出现先后为序 $:第一个依赖文件的名称 $?:所有依赖文件,空格分开,修改日期比目标创建日期晚 $:目标的完整名称 $:所有依赖文件,以空格分开,不包含

6、重复的依赖文件 $%:若目标是归档成员,则该变量表示目标的归档成员名称,makefile - 4,Makefile中定义模式规则 使用模式规则来定义一个隐含规则 把所有的.c文件都编译成.o文件 %.o:%.c $(CC)-c$(CFLAGS)$(CPPFLAGS)$-o$ 取消内建的隐含规则,只要不在后面写命令就行 %.o:%.s -l(小L)参数 添加库文件 -I(大i)参数 添加include文件路径,gdb的使用1,GDB主要完成下面四个方面的功能 启动程序,按照自定义的要求随心所欲地运行程序 设置断点(断点可以是条件表达式) 程序停住时,可以检查此时程序中所发生的事 动态改变程序的执

7、行环境(变量值等) 使用条件 编译时要设置-g参数 编译结果包含调试信息 使用方式 利用gdb启动程序 指定进程ID,gdb自动attach上去并调试 同时调试一个运行程序和core文件,gdb的使用2,1、使用gdb启动程序 gdb myprogram 2、设置断点(breakpointb) (gdb) b filename:line-number (gdb) b filename:function-name (gdb) b 46 if testsize=100 (当前文件的46行) 3、开始执行(runr) 4、变量的检查和赋值 whatis:识别数组或变量的类型 ptype:比whati

8、s的功能更强,可以提供一个结构的定义 set variable:将值赋予变量 print :显示一个变量的值外;还可以用来赋值,gdb的使用3,5、继续执行(continuec) 6、单步执行 next(n):不进入的单步执行 step (s):进入的单步执行 finish:想退出该函数返回到它的调用函数中 7、函数的调用 (gdb) call gen_and_sork( 1234,1,0 ) 8、显示数据 (gdb) print p (p为变量名) (gdb) print find_entry(1,0) 9、程序参数 (gdb)set args b x (gdb) show args 10、

9、断点管理 (gdb) info break (gdb) delete breakpoint 1 (gdb) disable/enable breakpoint 1,变量的作用域与内存分配,全局变量 临时变量 类成员(C+) namespace 内存分配原则 全局变量存放在数据区 局部变量存放在栈区 动态变量存放在堆区 栈 是系统提供并管理,快速高效,无须释放(自动释放) 对进程/线程是惟一的 普通的栈数据结构,LIFO 局部变量安排在那里,可以在一个函数结束后平衡堆栈 缺点是有限制,数据不灵活,变量的作用域与内存分配,堆(动态区) 函数库提供,灵活方便,数据适应面广泛程序员管理 对进程/线程不

10、一定唯一 程序编译时产生的一块用于产生动态内存分配使用的块 操作比栈麻烦,分配和回收时的效率比栈低 分配时要判断最优地址:防止产生无用的内存碎片 需要精确的申请内存/ 释放内存匹配 分静态分配 编译器完成的,比如自动变量(auto)的分配 动态分配 由alloc函数完成 栈的动态分配无需释放(是自动的) 静态变量(static) 作用域可以是局部的 静态区的一次存取(具有记忆性),堆栈区别的小结,使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小 使用堆就象是自己动手做喜欢吃的菜肴,

11、比较麻烦,但是比较符合自己的口味,而且自由度大 虽然堆栈、堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因,函数调用的过程,压入参数 将调用者给出的参数一一压入堆栈 压入断点 程序执行到Call指令时,当前语句地址作为断点地址压入堆栈 跳转 当前指令下一条指令的地址被重设为被调函数的起始地址 堆栈中已分配给局部变量的内存空间的初始化 顺序执行函数内语句 此时函数的堆栈位于所有局部变量的内存空间之后 返回 为保障调用的正常返回,函数内应当保证规范使用堆栈 使即将返回的时候“下一条指令地址” 值恢复为执行第一条语句前的状态 每一条push都要有相应的pop 为什么值参的修改不起作用?,编程辅助工具,版本管理 CVS:Concurrent Version System VSS:Visual Source Safe Beyond Compare 文件夹和文件对比工具 Source Insight 面向项目开发的程序编辑器和代码浏览器 能分析源代码并动态维护符号数据库,自动显示上下文信息 还能显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论