Linux平台C及C++软件开发入门

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• makefile 文件需要按照某种语法进行编写
– 说明如何编译各个源文件并连接生成可执行文件 – 定义源文件之间的依赖关系
• -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 c.h cc -c filec.c 注1:一定要用Tab键 注2:目标vs依赖关系(最小重建)
Linux系统的安装
• 一般安装
– 分配单独的硬盘分区;设置为Linux支持的硬盘格式
• 虚拟机安装
– 定义:软件模拟的具有完整硬件系统功能的、运行在一个 完全隔离环境中的完整计算机系统 – 可以在一台物理计算机上模拟出一台或多台虚拟的计算机
• 完全就像真正的计算机那样进行工作
– 安装操作系统、安装应用程序、访问网络资源等
– (gdb) b filename:line-number – (gdb) b filename:function-name – (gdb) b 46 if testsize==100 (当前文件的46行)
• 3、开始执行(runr) • 4、变量的检查和赋值
– – – – whatis:识别数组或变量的类型 ptype:比whatis的功能更强,可以提供一个结构的定义 set variable:将值赋予变Baidu Nhomakorabea print :显示一个变量的值外;还可以用来赋值
• 一旦开始运行将保持运行状态,直到受到外来因素的影响
– 除了Linux内核之外,其他软件的安装、启动、停止和重新配置都不用 重新引导系统
• 可以远程地完成Linux中的很多工作 • 如果系统中一个特定的服务出现了问题,可以在进行故障诊 断的同时让其他服务继续运行 • 命令区分大小写 • 用户操作没有Windows系列方便
变量的作用域与内存分配
• 堆(动态区)
– – – – 函数库提供,灵活方便,数据适应面广泛--程序员管理 对进程/线程不一定唯一 程序编译时产生的一块用于产生动态内存分配使用的块 操作比栈麻烦,分配和回收时的效率比栈低
• 分配时要判断最优地址:防止产生无用的内存碎片
– 需要精确的申请内存/ 释放内存匹配
• -l(小L)参数
– 添加库文件
• -I(大i)参数
– 添加include文件路径
gdb的使用1
• GDB主要完成下面四个方面的功能
– – – – 启动程序,按照自定义的要求随心所欲地运行程序 设置断点(断点可以是条件表达式) 程序停住时,可以检查此时程序中所发生的事 动态改变程序的执行环境(变量值等)
Linux的发展
• 1991年8月,核心由25岁的芬兰大学生Linus Torvalds发布
– Linux=Linus+Minix(Linux编写的类似Minix的系统) – Minix=Mini UNIX,约300MB(还有Idris,Coherent,Uniflex等) – 都是重新发展的,并没有使用任何AT&T的程序码
• 使用条件
– 编译时要设置-g参数 – 编译结果包含调试信息
• 使用方式
– 利用gdb启动程序 – 指定进程ID,gdb自动attach上去并调试 – 同时调试一个运行程序和core文件
gdb的使用2
• 1、使用gdb启动程序
– gdb myprogram
• 2、设置断点(breakpointb)
• 多任务并行:分时服务 • 资源共享
– 使用用户可以充分地利用系统资源 – 用户可忽略硬件设备控制细节,只需提出要求
• 操作系统负责操纵设备以完成所希望的工作
– 资源分配策略(如根据优先级) – 通过控制、调度、分配、管理计算机系统资源, 达到对计算机的自动控制
操作系统主要功能
• 存贮管理
– 为每个程序分配足够的存贮空间
• 分静态分配
– 编译器完成的,比如自动变量(auto)的分配
• 动态分配
– 由alloc函数完成 – 栈的动态分配无需释放(是自动的)
• 真正的多任务、虚拟存储、快速的TCP/IP实现、共享库、多用户、支持 32位和64位多任务
• Linux应用逐渐普及
– 服务器 – 家庭机
Linux操作系统的特点
• 内核特点:短小精悍,具有更高的灵活性和适应性 • 最大特点:源代码完全公开(核心、驱动,应用程序等) • 主要特点
– (1)多用户、多任务的操作系统
makefile - 3
• Makefile中的宏定义
– OBJECTS= filea.o fileb.o filec.o – LIBES= -LS – prog: $(OBJECTS) – cc $(OBJECTS) $(LIBES) -o prog
• GNU make 的主要预定义变量
– – – – – – – $*:不包含扩展名的目标文件名称 $+:所有依赖文件(可重复),空格分开,以出现先后为序 $<:第一个依赖文件的名称 $?:所有依赖文件,空格分开,修改日期比目标创建日期晚 $@:目标的完整名称 $^:所有依赖文件,以空格分开,不包含重复的依赖文件 $%:若目标是归档成员,则该变量表示目标的归档成员名称
Linux平台C及C++软件开发入门
邢延超 2009年秋季学期
主要内容
• • • • • • • Linux操作系统的安装及使用 gcc、gdb及makefile文件 内存分配与函数调用 文件和目录操作 网络编程基础 多线程编程 进程间通信
Linux操作系统
• 操作系统属性
– 基本的系统软件,是硬件的第一级扩充 – 基本特征
– (gdb) print p (p为变量名) – (gdb) print find_entry(1,0)
• 9、程序参数
– (gdb)set args –b –x – (gdb) show args
• 10、断点管理
– (gdb) info break – (gdb) delete breakpoint 1 – (gdb) disable/enable breakpoint 1
• 不加-o,输出a.out
makefile - 1
• ―自动化编译”,提高效率
– 写好后,只需调用make,整个工程完全自动编译
• 大多数的IDE都有这个命令
– Delphi的make – Visual C++的nmake – Linux下GNU的make
• Make工具最主要也是最基本的功能
– 通过makefile文件来描述源程序之间的相互关系 – 自动维护编译工作
• Linux 的应用目标是网络而不是打印
– 纯文本易于跨网络工作,Linux 配置文件和数据都以文本为基础
• Linux开发更多关注的是其内在功能而非表面的东西 • 图形环境并没有集成到 Linux 中
– 是运行于系统之上的单独一层,可选择
• Linux不使用文件名扩展来识别文件的类型
– Linux通过文件访问权限来判断文件是否为可执行文件
• CPU管理
– 为程序分配优先级 – 采用一定调度方法,以时间片轮转方式轮流占用CPU
• 设备管理
– 控制外部设备的操作 – 在多个作业间分配设备
• 独占设备,如打印机
– 按一定策略轮流分配给用户使用
• 共享设备:磁盘阵列
• 文件管理
– 文件的建立、删除、读取、或写入等方面的服务
• 进程与线程管理、调度等
makefile - 4
• Makefile中定义模式规则
– 使用模式规则来定义一个隐含规则 – 把所有的[.c]文件都编译成[.o]文件 – %.o : %.c – $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ – 取消内建的隐含规则,只要不在后面写命令就行 – %.o : %.s
gdb的使用3
• 5、继续执行(continuec) • 6、单步执行
– next(n):不进入的单步执行 – step (s):进入的单步执行 – finish:想退出该函数返回到它的调用函数中
• 7、函数的调用
– (gdb) call gen_and_sork( 1234,1,0 )
• 8、显示数据
变量的作用域与内存分配
• • • • • 全局变量 临时变量 类成员(C++) namespace 内存分配原则
– 全局变量存放在数据区 – 局部变量存放在栈区 – 动态变量存放在堆区
• 栈
– – – – – 是系统提供并管理,快速高效,无须释放(自动释放) 对进程/线程是惟一的 普通的栈数据结构,LIFO 局部变量安排在那里,可以在一个函数结束后平衡堆栈 缺点是有限制,数据不灵活
• 多个用户可以同时在相同计算机上操作(通过终端或虚拟控制台) • 可同时执行多个进程,提供了进程间通信方式,使各进程能协同工作 • 具有进程间内存地址保护(当某个进程出错时,不会波及整个系统)
– (2)支持多种文件系统
• Ext2FS、ISOFS、Minix、Xenix、FAT16、FAT32、NTFS等 • 自己还有一个先进的文件系统(4TB) • KiloByte MegaByte GigaByte TeraByte (万亿)
– 在多操作系统支持和执行效率上都明显高出一筹
• Virtual PC
Linux的使用1
• 图形化界面
– Mozilla、文本编辑器、目录管理器、CD播放器
• 控制台
– 文本界面
• 高效 • 开发 • 系统管理
• 目录结构
– 惟一根目录 – 权限设置
• 文件
– PATH变量
Linux的使用2
• 部分Linux命令的简单介绍
• 发布到Internet上后不断修改和完善,几年后在全球普及 • 应用平台
– 最初针对的是Intel构架的个人计算机 – 在服务器领域:Sun公司的Sparc工作站、DEC公司的Alpha工作站等 – 嵌入式开发方面具有无可比拟的优势
• 特色
– 源代码是自由分发的,完全公开,完全免费 – 涵盖了Unix的所有特诊,融合了其它OS的东西
– 对用户,虚拟机只是运行在物理计算机上的一个应用程序 – 对虚拟机中运行的应用程序,它就像是一个真正的计算机 – 虚拟机中发生的系统崩溃只是虚拟机上的操作系统
• 不是物理计算机上的操作系统 • 使用 “Undo‖ 功能,可以马上恢复虚拟机到安装软件前的状态
– 当前主流虚拟机
• VMware(VMWare ACE)
– (3)符合POSIX 1003.1标准
• 能够使用Unix等OS上丰富的应用程序
– (4)较好的可移植性
• 只有小于10%的源代码采用汇编语言编写,其余均采用C
– (5)支持多平台和多处理器 – (6)全面支持TCP/IP网络协议
• TCP、IPv4、IPX、DDP、AX.25等
Linux 与 Windows 的不同
• 一般用户
– 很多时候利用图形化界面完成工作
• 娱乐 • 文档编辑 • 上网
gcc及其使用
• GNU之父Stallman开发的Linux下的编译器
– GCC=GNU Compiler Collection
• 目前可以编译的语言
– C, C++, Objective-C, Fortran, Java, and Ada
• 从源文件到可执行文件
– gcc -E 完成预处理,输出域名(展开)
• #include; #define; etc
– gcc -s 不进行汇编,只生成汇编语言
• 某些代码直接就是用汇编写的
– gcc -c 将原文件编程.o文件(即二进制文件)
• 仍然不可执行,为什么?
– gcc -o 指定输出文件的名字,重新命名
– – – – – – – – – – – – man pwd ls cp mv chmod cd echo mkdir rm su netstat
Linux的使用3
• 系统管理员
– 构建各种服务器 – 用户管理 – 系统运行情况监测
• 服务器被攻击
• 开发人员
– 图形化开发工具(如Qt) – 非图形化开发工具(gcc)
相关文档
最新文档