Linux 编程环境
1.编辑器 vi
(1)编辑器 vi 简介
编辑器 vi 最初是由 Sun Microsystrms 公司的 Bill Joy 在1976 年开发的。启初,开发出了 Ex 编辑器,也称为行编辑器,后来开发了vi作为Ex的可视接口,一次能看到一屏的文本而不仅仅是一行,vi因此得名。vi在通过命令操作,界面不友好,对普通人不容易掌握。但是,其丰富的命令和强大的功能,以及占用资源少的特性,使得它在嵌入式Linux系统中,广泛使用。
(2)vi用法
vi的三种模式:
插入模式: 写代码
可视模式: 复制、粘贴、删除、查找等
命令模式:
2.编译器 gcc
(1)编译器 gcc 简介
Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。
(2)gcc 的编译过程
源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件
预处理(Preprocessing):
主要处理源文件中,以'#'开头的语句,如#include #ifdef #define等,该阶段会产生一个中间文件 (*.i)。
命令 gcc -E -o rand.i rand.c。
编译阶段(Compilation):
预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
命令:gcc -S -o rand.s rand.i
汇编阶段(Assembly):
在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
命令:gcc -c -o rand.o rand.s
链接阶段(Linking):
汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
命令:gcc -o 577 zmx.o
(3)gcc 常见的用法
gcc -c
gcc -E
gcc -S
gcc -o 生成指定的输出文件
gcc -v 查询gcc版本信息
gcc -g 生成调试信息,gdb调试器可以利用该信息
gcc -I 指定额外的头文件搜索路径
gcc -L 指定额外的函数库搜索路径
gcc -static 静态链接库,默认都是动态链接库
gcc -w 不生成任何警告信息
gcc -Wall 生成所有警告信息
gcc -c rand.c -o 577
gcc -o 577 zmx.c
gcc zmx.c -g -o zzz
3.调试器 gdb
(1)调试器 gdb 简介
gdb是Linux系统上缺省使用的调试器。gdb也可以被移植到不同的平台上,如ARM系列处理器的调试器
(2)gdb 用法
1.进入gdb调试环境,有两种方式。
(1)在shell终端,直接输入 gdb ,会看到gdb的一些版本信息;然后使用file 命令调试可执行程序。 file 577 (577 为需要调试的可执行程序)
(2)在终端直接输入 gdb 577
2.gdb 的常用命令:
命令 简写 格式 含义
file file 文件名 加载文件
display display 变量名 显示参数(设置监听变量)
run r run args 运行程序
list l list [开始,结束] 列出文件的代码清单
print p print 变量名 打印变量的内容
break b break [行号或函数名] 设置断点
continue c continue [开始,结束] 继续运行
info i info 变量名 列出信息
next n next 下一行
step S step 进入函数(步入)
quit q 退出
delete delete nu 删除断点 delete nu (nu 表示第几个断点,而不是第几行的断点)
disable disable nu 禁用断点
enable enable nu 恢复禁用的断点
make 是一个命令,用来解析Makefile文件;
Makefile 是一个文件,用来告诉 make 命令如何编译整个工程,生成可执行文件。
(2)make 命令
make [选项] [Makefile 文件]
make 执行的流程:
1. 查找当前目录下的 Makefile 文件;
2. 初始化 Makefile 文件中的变量;
3. 分析 Makefile 中的所有规则;
4. 为所有的文件创建依赖关系;
5. 根据依赖关系,决定哪些目标文件要重新生成;
6. 执行生成命令。
(1)Makefile 是由规则来实现的: 目标 依赖 命令
(2)Makefile 的格式:
目标: 依赖
<Tab> 命令
目标和依赖之间,通过“:”分隔,命令前面,是由“Tab”键产生的空格。
当 make 命令去执行 Makefile 文件时,其规则被这样处理:
·目标是文件,依赖也是文件。若依赖文件的时间,比目标文件的时间新,说明依赖文件被更新了。则运行规则包含的命令,产生新的目标文件。
·如果依赖的是另一条规则的目标,则先跳到另一条规则去执行命令,再返回当前规则。
577: main.o x.o y.o z.o
<Tab> gcc -o 577 main.o x.o y.o z.o
main.o: main.c
gcc -c -o main.o main.c
. .
. .
. .
1.编辑器 vi
(1)编辑器 vi 简介
编辑器 vi 最初是由 Sun Microsystrms 公司的 Bill Joy 在1976 年开发的。启初,开发出了 Ex 编辑器,也称为行编辑器,后来开发了vi作为Ex的可视接口,一次能看到一屏的文本而不仅仅是一行,vi因此得名。vi在通过命令操作,界面不友好,对普通人不容易掌握。但是,其丰富的命令和强大的功能,以及占用资源少的特性,使得它在嵌入式Linux系统中,广泛使用。
(2)vi用法
vi的三种模式:
插入模式: 写代码
可视模式: 复制、粘贴、删除、查找等
命令模式:
2.编译器 gcc
(1)编译器 gcc 简介
Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,它是GNU的代表作品之一,gcc是可以在多种硬件平台上编译出可执行文件的超级编译器,其执行效率比一般的编译器要高出20%-30%。编译器能将C、C++语言源程序、汇编语言源程序和目标程序编译、链接成可执行文件如果没有给出可执行文件的名字,gcc将生成一个默认名为a.out的可执行文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件,而gcc则通过后缀来区别输入文件的类型。
(2)gcc 的编译过程
源文件(.c .h)-> 预处理->编译->汇编->(静态库,动态库)链接->可执行文件
预处理(Preprocessing):
主要处理源文件中,以'#'开头的语句,如#include #ifdef #define等,该阶段会产生一个中间文件 (*.i)。
命令 gcc -E -o rand.i rand.c。
编译阶段(Compilation):
预处理完成后,gcc首先检查代码的规范性,以及是否有语法错误等。检查无误后,开始把代码翻译成汇编语言。
命令:gcc -S -o rand.s rand.i
汇编阶段(Assembly):
在汇编阶段,将输入的汇编文件 *.s,转换成目标文件 *.o, *.o 已经是二进制文件,即 0 和 1的机器语言,但是,它不是可执行的二进制文件。
命令:gcc -c -o rand.o rand.s
链接阶段(Linking):
汇编之后,进入链接。在链接阶段,通过链接各种静态库和动态库,得到可执行文件。
命令:gcc -o 577 zmx.o
(3)gcc 常见的用法
gcc -c
gcc -E
gcc -S
gcc -o 生成指定的输出文件
gcc -v 查询gcc版本信息
gcc -g 生成调试信息,gdb调试器可以利用该信息
gcc -I 指定额外的头文件搜索路径
gcc -L 指定额外的函数库搜索路径
gcc -static 静态链接库,默认都是动态链接库
gcc -w 不生成任何警告信息
gcc -Wall 生成所有警告信息
gcc -c rand.c -o 577
gcc -o 577 zmx.c
gcc zmx.c -g -o zzz
3.调试器 gdb
(1)调试器 gdb 简介
gdb是Linux系统上缺省使用的调试器。gdb也可以被移植到不同的平台上,如ARM系列处理器的调试器
(2)gdb 用法
1.进入gdb调试环境,有两种方式。
(1)在shell终端,直接输入 gdb ,会看到gdb的一些版本信息;然后使用file 命令调试可执行程序。 file 577 (577 为需要调试的可执行程序)
(2)在终端直接输入 gdb 577
2.gdb 的常用命令:
命令 简写 格式 含义
file file 文件名 加载文件
display display 变量名 显示参数(设置监听变量)
run r run args 运行程序
list l list [开始,结束] 列出文件的代码清单
print p print 变量名 打印变量的内容
break b break [行号或函数名] 设置断点
continue c continue [开始,结束] 继续运行
info i info 变量名 列出信息
next n next 下一行
step S step 进入函数(步入)
quit q 退出
delete delete nu 删除断点 delete nu (nu 表示第几个断点,而不是第几行的断点)
disable disable nu 禁用断点
enable enable nu 恢复禁用的断点
4.make 和 Makefile
(1)make 和 Makefile 概述make 是一个命令,用来解析Makefile文件;
Makefile 是一个文件,用来告诉 make 命令如何编译整个工程,生成可执行文件。
(2)make 命令
make [选项] [Makefile 文件]
make 执行的流程:
1. 查找当前目录下的 Makefile 文件;
2. 初始化 Makefile 文件中的变量;
3. 分析 Makefile 中的所有规则;
4. 为所有的文件创建依赖关系;
5. 根据依赖关系,决定哪些目标文件要重新生成;
6. 执行生成命令。
(3)Makefile 文件内容
1. 规则(1)Makefile 是由规则来实现的: 目标 依赖 命令
(2)Makefile 的格式:
目标: 依赖
<Tab> 命令
目标和依赖之间,通过“:”分隔,命令前面,是由“Tab”键产生的空格。
当 make 命令去执行 Makefile 文件时,其规则被这样处理:
·目标是文件,依赖也是文件。若依赖文件的时间,比目标文件的时间新,说明依赖文件被更新了。则运行规则包含的命令,产生新的目标文件。
·如果依赖的是另一条规则的目标,则先跳到另一条规则去执行命令,再返回当前规则。
·如果目标不是一个存在的文件,则一定执行。(目标不存在,必须执行)
577: main.o x.o y.o z.o
<Tab> gcc -o 577 main.o x.o y.o z.o
main.o: main.c
gcc -c -o main.o main.c
. .
. .
. .