1 / 84

第 1 讲 Linux 编程工具包

主讲 : 贺金平. 第 1 讲 Linux 编程工具包. 本讲内容目录. 1 Linux 历史与版本 2 Linux 操作系统安装 3 Linux 常用命令 4 vi 编辑器 5 使用 GNU CC ( gcc ) 6 Make 管理项目 7 autotools 8 RCS 与 CVS 版式本控制 9 GDB 调试 10 出错处理 11 使用库. 1.1 Linux 历史与版本. Linux 是一种类 Unix 操作系统,是一个完全免费的操作系统

aran
Download Presentation

第 1 讲 Linux 编程工具包

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 主讲: 贺金平 第1讲 Linux编程工具包

  2. 本讲内容目录 • 1 Linux历史与版本 • 2 Linux操作系统安装 • 3 Linux常用命令 • 4 vi 编辑器 • 5 使用GNU CC(gcc) • 6 Make管理项目 • 7 autotools • 8 RCS与CVS版式本控制 • 9 GDB调试 • 10 出错处理 • 11使用库

  3. 1.1 Linux历史与版本 • Linux是一种类Unix操作系统,是一个完全免费的操作系统 • Linux最早是Linus Torvalds (李纳斯·托沃兹 )于1991年在芬兰赫尔辛基大学原创开发的,并在GNU的GPL(General Public License)原则下发行。 • GNU:为推广自由软件的精神而实现一个自由的操作系统,然后从应用程序开始,实现其内核.linux优良的内核性能使GNU采用了linux内核并进行开发。 • GPL:通用公共协议,是一个开放而又严格的许可协议,它规定了源码必须可以无偿的获得且可修改. • Linux又称为GNU/linux,其中许多重要的工具如gcc、gdb、make、emacs等都是GNU贡献的

  4. 1.2 linux的发行版本 • Linux内核版本有两种:稳定版和开发版。 • Linux内核的命名机制:内核版本由3部分数字构成的(主版本号.次版本号. 修订版本号,例如:2 . 4 . 18 ) • 如果次版本号是偶数,那么该内核就是稳定版;若是奇数,则是开发版。 • *查看内核版本命令:cat /proc/version 或 cat /etc/issue 或 uname -a • 到目前为止,linux发行版本已超过250多种,内核也从原来的0.01发展到现在的2.6.x.x

  5. 国内外主要发行版本 国外: 1.Red Hat Linux (fedora Linux) 2.SuSE Linux 3.Debian Linux (Ubuntu Linux) 4.Mandrake Linux 5. Gentoo Linux 国内: 1.红旗 Linux 2.中标普华 Linux 3.共创 Linux 4.冲浪 Linux 5. 蓝点 Linux

  6. 2 Linux操作系统安装 • 2.1 Linux系统安装 • 2.2 WMware虚拟机安装 • 2.3 虚拟机工具(wmtools)安装 • 2.4 设定共享目录

  7. 2.1 Linux系统安装 • 安装光盘:red hat linux安装光盘有三张,可在网上下载ISO文件 • 分区:red hat linux安装至少要三个分区:启动分区(/boot)、交换分区(swap)、根分区(/) • SWAP分区:linux在硬盘上划出一个区域来当作临时内存,相当于windows系统中的虚拟内存,一般将其设为内存大的2倍 • Grub:linux系统的引导装载器。 • Root权限:linux是一个多用户操作系统。Root是超级用户 • 安装硬件要求:硬盘空间建议大于3G,内存建议大于256M

  8. Linux安装步骤及注意事项 • 安装步骤:详见安装图解 • 注意事项: • 作为嵌入式系统开发,建议在VMware Workstation软件中安装虚拟机,硬盘空间建议6G~12G • 分区时选择手动分区 • 安装过程中,切记root用户的密码

  9. 2.3 虚拟机及工具(wmtools)安装 • 安装VMware Workstation 5.0.0 build-13124虚拟机 • 安装WMware Tools

  10. 安装WMware Tools • 如果不安装此工具包,鼠标进入到虚拟机后,要按下 CTRL+ALT组合键 才能将鼠标退出到windows系统,操作起来比较麻烦。 • 安装方法如下:

  11. 安装方法如下 #tar zxf vmware-linux-tools.tar.gz //注:此工具包在安装光盘中就有 #cd vmware-linux-tools //进入解压后的目录 #./vmware-install.pl (运行安装脚本) 这时install提示你是否需要备份以前的配置文件,建议选择"y" vmware安装完成之后: #service vmware-tools start //启动vmware-tools服务 运行vmware-config.pl的时候,会有一步是询问内核的头文件在哪里,解决方法从安装光盘中copy kernel-xen-devel-2.6.18-8.el5.i686.rpm # rpm -ivh kernel-xen-devel-2.6.18-8.el5.i686.rpm重新执行vmware-config.pl,可以解决这个问题。

  12. 2.4 设定共享目录

  13. 查看共享目录 • # /mnt/hgfs/hjp/ 共享设置完毕后,linux系统中会有此目录,把windows中的文件拷贝到E:\vmshare目录,再去虚拟机的/mnt/hgfs/hjp看看文件是否在那里了,如果操作无误,则共享目录设置成功。

  14. 3 Linux常用命令 • #cd .. //进入上一级目录 • #ls -l ls -a //显示文件-l详细,-a显示隐藏 • #mkdir filepath //建立目录 • #rm –rf filepath //删除目录 • #touch helloworld.c vi helloworld.c //建立新文件 • #cp helloworld.c /root/hello.c //拷贝文件并改名 • #cp –a filepath /root //拷贝目录(带链接) • #mv helloworld.c /root/hello.c //移动文件并改名 • # rm –f helloworld.c //删除文件

  15. Linux常用命令(续) • #find . –name hello.c //在当前目录及子目录查找文件 • #grep –R “printf” . //查看当前目录中包含printf的文件 • #file helloworld.c //显示文件属性 • #uname –r //显示当前内核版本 • #who //显示当前登录用户 • #tar zxvf filepath.tar.gz //解压.tar.gz文件 • #tar zcvf filepath.tar.gz filepath //压缩.tar.gz • #tar jxvf filepath.tar.bz2 //解压.tar.bz2文件 • #tar jcvf filepath.tar.bz2 filepath //压缩.tar.bz2

  16. Linux常用命令(续) • #cat hello.c //显示文件内容 • #chmod 755 hello //为hello文件设置权限 • #pwd //查看当前目录的绝对路径 • #mount //挂载设备到目录 • #unmount //卸载 • #export //声明环境变量 • #exit //关闭当前终端 • #man find • #help

  17. Linux常用命令(续) • #insmod //加载模块 • #lsmod //查看已加载模块 • #rmmod //卸载模块 • #ps –e //查看当前所有运行的进程 • #kill //结束某进行 • #reboot //重启系统 • #halt //关机 • #ifconfig //查看(配置)IP地址 • #ping

  18. 4 vi编辑器 • Vi是一个高级文本编辑器。它可以执行输出、删除、查找、替换等众多文本操作而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。 • Vi有三种基本工作模式:命令行模式,文本输入模式,末行模式。

  19. Vi三种工作模式 • 命令行模式:不管处于何种模式,只要按一下ESC键即可使vim进入命令行模式;此时从键盘上输入的任何字符都被当作编辑命令来解释。 • 文本输入模式:在命令模式下输入插入命令i等都可以进入文本输入模式;在该模式下输入的任何字符都被当做文件内容保存起来。 • 末行模式:在命令模式下按“: 键”即可进入末行模式;此时会在显示窗口的末行显示一个冒号作为末行模式的提示符,等待用户输入命令。

  20. vi的进入与退出 • 进入vi:在shell模式下键入vi及需要编辑的文件名即可。例如:vi example.txt • 退出vi:首先按ESC键进入命令模式,然后输入:进入末行模式,末行模式下输入q直接退出;wq(或x)保存后退出;q!不保存强制退出。

  21. 光标移动操作 • vi 中的光标移动既可以在命令模式,下也可以在文本输入模式下。 • 在文本输入模式下可直接使用键盘上的四个方向键移动光标。 • 在命令模式下除了使用四个方向键还可以用h(左)、l(右)、j(上)、k(下)这四个键来移动光标。(熟练后可以达到手不离键,从而提高工作效率) • 快速移动命令:0(零)光标移到行首;$光标移到行尾;nG光标移到第n行;H光标移到屏幕上显示的第一行;L光标移到屏幕上显示的最后一行;M光标移到屏幕的中间一行。

  22. 文本插入操作 • 1. 插入命令:i命令,插入文本从光标所在位置前开始,屏幕末行显示“--INSERT --”提示字样。I 移到该行行首,在其前插入文本。 • 2. 附加命令:a命令,该命令用于在光标当前所在位置之后追加新文本,新输入的文本被放在光标之后。A 移到行尾,在其后插入文本。 • 3. 添行命令:o命令,该命令将在光标所在行的下面新开一行,并将光标置于该行的行首,等待输入文本;O 是在光标所在行的上面插入一行。

  23. 文本修改操作 • 1. 文本删除/移动; • 删除单个字符:x删除光标处的字符;nx删除从光标所在位置开始向右的n个字符;X删除光标前面的那个字符; nX删除从光标前面开始向左的n个字符。 • 删除多个字符:dd删除光标所在的整行;dw删除一个单词;d0删除从光标前一个字符开始到行首的内容;d$(或D)删除从光标所在处开始到行尾的内容。 • 2. 文本复制命令;yy复制光标所在的整行,可以使用p命令粘贴。(dd类似与剪切) • 3. 撤销与重做命令:u支持多次撤销,U单次撤销。在命令模式下按“.”(点号)键既可重做。

  24. 文本搜索与替换 1. 模式搜索命令: “/”命令,从光标位置向文件尾部搜索键入的模式,搜索下一个匹配使用n,搜索上一个匹配使用N; “?”命令,从光标位置向文件头部搜索。 2. 文本替换命令:(必须在末行模式下操作) :s/text1/text2 将光标所在段落搜索到的第一个text1替换为text2; :s/text1/text2/g 将光标所在段落的所有text1替换为text2; :1,$s/text1/text2/g 替换所有符合条件的字符( 1,$ 表示搜索范围是从首行到末行)

  25. 5 使用GNU CC(gcc)编译器 • GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能编译C、C++等语言编写的程序。

  26. GCC编译流程解析 • GCC编译流程分为4个步骤: (1)预处理(pre-processing) (2)编译(compiling) (3)汇编(assembling) (4)链接(linking) GCC指令的一般格式: Gcc [选项] 源文件 [选项] 目标文件 其中,目标文件可缺省,Gcc默认生成可执行的文件,名为”编译文件.out”

  27. GCC例子 • Helloworld.c程序(vi编译器编辑程序): #include <stdio.h> Int main(){ printf(“hello,this is our embedded world!\n”); return 0; } • 编译: gcc helloworld.c –o helloworld.o • 运行: ./helloworld.o

  28. GCC编译选项分析(1)

  29. GCC编译选项分析(2)

  30. GCC编译选项分析(3)

  31. 6 Make管理项目 • 6.1 Make工程管理器 • 6.2 Makefile文件格式及规则

  32. 6.1Make工程管理器 • Make工程管理器:顾名思义,是指管理较多的文件的。如果一个应用要涉及很多个程序文件,手工用GCC一个个去编译将是一件很麻烦的事情;另外,编译一次后,根据需要如果只部分程序做了改动,则应只需重新编译改过后的文件,人们希望有一个工程管理器能自动识别更新了的文件代码,同时又不需要重复输入冗长的命令长,于是,make工程管理器就应运而生了。

  33. 6.2 Makefile文件格式及规则 • Makefile是make读入的惟一的配置文件,本节要讲的实际上就是makefile文件的编写规则。 • 一个Makefile中通常包含如下内容: • 需要由make工具创建的目标体(target),通常是目标文件或可执行文件 • 要创建的目标体所依赖的文件(dependency_file) • 创建每个目标体时需要运行的命令(command) • Makefile是格式为: target : dependency_file command 注意: (1)每个command前必须有Tab符 (2)Makefile中使用”#” 注释程序

  34. 一个简单的例子 #the simplest example Hello.o:hello.c hello.h gcc –c hello.c -o hello.o 注意:gcc前是一个tab符

  35. Makefile中使用变量 • 为了简化编辑和维护Makefile,允许在Makefile中创建和使用变量,变量是在Makefile中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。在具体要求下,这些值可以代替目标体、依赖文件、命令以及Makefile文件中的其他部分。 • Makefile中的变量有两种方式:递归展开方式和简单方式。递归展开方式是指定义的变量又在引用其他的变量,在使用该变量时一次性将内嵌的变量全部展开,这种方式的缺点是有时会导致变量的循环引用。简单展开方式定义的变量在定义处展开,并且只展开一次,因此它不含任何其他变量的引用。

  36. 关于变量名 • 递归展开方式为: VAR=var • 简单展开方式为: VAR:=var • Make中引用变量均使用格式: $(VAR) • 变量名是不包括”:”、”#”、“=”结尾空格的任何字符。同时变量名中包含字母、数字和下划线以外的情况尽量避免,因为它们可能存在特定的含义 • 变量名是区分大小写的。即foo和Foo代表不同的变量。

  37. 例子:Makefile中使用变量 OBJS=he.o jin.o ping.o CC=gcc CFLAGS=-Wall –o –g Hjp:$(OBJS) $(CC) $(OBJS) -o hjp He.o: he.c he.h $(CC) $(CFLAGS) –c he.c –o he.o Jin.o:jin.c jin.h $(CC) $(CFLAGS) –c jin.c –o jin.o Ping.o : ping.c ping.h $(CC) $(CFLAGS) –c ping.c –o ping.o

  38. Makefile变量的分类 • Makefile中的变量分为用户自定义变量、预定义变量、自动变量及环境变量。 • 上例中OBJS就是用户自定义变量,由用户自行设定,而预定义变量和自动变量为通常在Makefile中都会出现的变量,其中部分有默认值,当然用户也可以对其进行修改。 • 自动变量:由于常见的GCC编译语句中通常包含了目标文件和依赖文件,为了简化Makefile的编写,就引入了自动变量。自动变量通常可以代表编译语句中出现的目标文件和依赖文件,并且具有本地含义(即下一语句出现的相同变量代表的是下一句的目标文件和依赖文件) • 环境变量:系统自动读取当前系统环境变量。如果用户自定义变量与之重名,则用户自定义变量将覆盖同名的环境变量.

  39. Makefile中常见的预定义变量

  40. Makefile中常见的自动变量

  41. 例子:自动变量使用 OBJS=he.o jin.o ping.o CC=gcc CFLAGS=-Wall –o –g Hjp:$(OBJS) $(CC) $(OBJS) -o hjp He.o: he.c he.h $(CC) $(CFLAGS) –c $^ –o $@ Jin.o:jin.c jin.h $(CC) $(CFLAGS) –c $< –o $@ Ping.o : ping.c ping.h $(CC) $(CFLAGS) –c $< –o $@

  42. Makefile规则 • Makefile规则是make进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。一般来说,Makefile中的一条语句就是一个规则。如上例中都显示地指出了Makefile中的规则关系,如“$(CC) $(CFLAGS) –c $^ –o $@“,为了简化Makefile的编写,make还定义了隐式规则和模式规则。

  43. (1)隐式规则 • 隐式规则能告诉make怎样使用传统的技术完成任务,当用户使用它们时不必详细指定编译的具体细节,而只需把目标文件列出即可。Make会自动搜索隐式规则目录来确定如何生成目标文件。 • 上例可写成: OBJS=he.o jin.o ping.o CC=gcc CFLAGS=-Wall –o –g Hjp:$(OBJS) $(CC) $^ -o $@

  44. 为什么可以省略后面几句? • 因为make的隐式规则指出:所有的”.o”文件都可自动由”.c”文件生成,使用命令: $(CC) $(CPPFLAGS) $(CFLAGS) –c file.c –o file.o 这样he.o、jin.o、ping.o就会分别调用如下生成: $(CC) $(CFLAGS) –c he.c –o he.o $(CC) $(CFLAGS) –c jin.c –o jin.o $(CC) $(CFLAGS) –c ping.c –o ping.o • 隐式规则只能查找到相同文件名的不同后缀名文件,如he.o文件必须由he.c文件生成

  45. Makefile中常见的隐式规则目录

  46. (2)模式规则 • 模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化Makefile的编写。 • 这个规则的相关文件前必须用”%”标明。 • 使用模式规则修改上例为如下: OBJS=he.o jin.o ping.o CC=gcc CFLAGS=-Wall –o –g Hjp:$(OBJS) $(CC) $^ -o $@ %.o : %.c $(CC) $(CFLAGS) –c $< -o $@

  47. Make管理器的使用 • Make使用时其后输入目标名即可建立指定的目标,如果直接运行make,建立Makefile中的第一个目标。Make命令有丰富的选项以完成不同的功能。

  48. 例子 • /*main.c*/ • #include "mytool1.h" • #include "mytool2.h" • int main(){ • mytool1_print("hello"); • mytool2_print("hello"); • }

  49. /*mytool1.h*/ • #ifndef _MYTOOL_1_H • #define _MYTOOL_1_H • void mytool1_print(char *print_str); • #endif • /*mytool2.h*/ • #ifndef _MYTOOL_2_H • #define _MYTOOL_2_H • void myrootl2_print(char *print_str); • #endif

More Related