实验三linux环境C语言开发工具
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
27
编译器GCC的使用
3、-c选项,只编译,不汇编连接:gcc -c hello.c -c意思就是Compile,产生一个叫hello.o的目标文档
28
编译器GCC的使用
4、-S选项,产生汇编源文档: 例:gcc -S hello.c -S意思就是aSsemble,产生一个叫hello.s的汇编源文档
-E
-g -o file -v -I dir -L dir
只进行预编译,不做其他处理
在可执行程序中包含标准调试信息 把输出文件输出到file里 打印出编译器内部编译各过程的命令行信息和编译器的版本 在头文件的搜索路径列表中添加dir目录 在库文件的搜索路径列表中添加dir目录
-static
-l library
常用格式: 或: 或: gcc gcc gcc C源文件 -o 目标文件名 -o 目标文件名 C源文件
C源文件
23
编译器GCC的使用
• GCC编译选项
编译选项有总体选项、告警和出错选项、优化选项和体系结构相关选项。
后 缀 名 -c -S 所对应的语言 只是编译不链接,生成目标文件“.o” 只是编译不汇编,生成汇编代码
预处理器
编译器
汇编器
连接器
21
gcc编译的4个过程:
• 预处理(也称预编译,Preprocessing): – 命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件 中的文件包含(include)、预编译语句(如宏定义define等)进行分析。 • 编译(Compilation): – 接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目 标文件。 • 汇编(Assembly): – 汇编过程是针对汇编语言的步骤,调用as进行工作。 • 连接(Linking): – 当所有的目标文件都生成之后,gcc就调用 ld来完成最后的关键性 工作,这个阶段就是连接
• 尝试进入vi编辑器文本模式的六种方式 • 实验一种方式后,文本输入模式下按ESC键,可以使vi编辑 器切换到命令模式下按ESC键回到命令模式下,就可以再实 验另一种方式了!
• vi编辑器处于任何模式下时(即文本输入模式和末行 模式,或者不清楚当前是什么模式),只需按ESC键即可 进入命令模式
ESC 命令模式 文本输入模式 末行模式 不清楚当前是什么模式
4、调试和运行C语言程序;
5、书写实验报告。
2
三、实验原理
vi 是 Linux 系统中的全屏幕文本编辑器,是最常用的 文本编辑工具软件之一。 vi 是字符界面下最常用的编辑工 具,其功能强大,占用资源少,但不支持鼠标操作。现在 出现了图形界面下的 vi ,称为 VIM ,启动菜单选项为“开 始→应用程序→实用工具→ VIM 编辑器”,支持鼠标操作, 有类似其他软件的菜单和快捷按钮。字符界面下 vi 的操作 规则可以用在图形界面下的 VIM 中,本书主要介绍字符界 面的vi。
18
gcc编译器
• Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、
性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以
在多种硬体平台上编译出可执行程序的超级编译器,其执行效率 与一般的编译器相比平均效率要高20%~30%。 gcc编译器能将C、C++语言源程序、汇程式化序和目标程序 编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc 将生成一个名为a.out的文件。在Linux系统中,可执行文件没有 统一的后缀,系统从文件的属性来区分可执行文件和不可执行文 件。而gcc则通过后缀来区别输入文件的类别。
29
编译器GCC的使用
5、-E选项,预处理C源文档 ,-E意思就是prEprocess,即只进行预处理, 不做其他处理。 例:gcc -E hello.c 预处理hello.c文档,输出不是送到一个文档而是标准输出。
把stdio.h的内容贴了进来,并在屏幕上输出。
30
编译器GCC的使用
5、-E选项,预处理C源文档。
20
编译器GCC的使用
• GCC编译工具由C语言源程序生成可执行文件的过程并不单单是一 个编译的过程,而要经过下面的几个过程。
–预处理(Pre-Processing) –编译(Compiling) –汇编(Assembling) –链接(Linking)
源 程 序 (*.c)
预处理
编译
汇编
链接
可执行文件
例:gcc -g hello.c –o hello2
33
编译选项
Gcc总体选项列表
选 项 -ansi -pedantic -pedantic-error 含 义 支持符合ANSI标准的C程序 允许发出ANSI C标准所列的全部警告信息 允许发出ANSI C标准所列的全部错误信息
-w
-Wall -werror
例:gcc -E hello.c -o hello.i
预处理hello.c文档,并将结果送到hello.i文件中。可用cat hello.i查看hello.i文件的内容。
31
编译选项
6、 -static:静态链接库文件 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如: libhello.so libhello.a。当使用静态库时,连接器找出程序所需的函数,然 后将它们拷贝到可执行文件,一旦连接成功,静态程序库也就不再需要了。 然而,对动态库而言,就不是这样,动态库会在执行程序内留下一个标记 ‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux 下进行连接的缺省操作是首先连接动态库。
例:gcc –static hello.c -o hello1
用静态键接库生成hello1可 执行文件,然后用ll命令查看大 小,会发现helloworld比 hello1小得多。
32
编译选项
7、 -g选项 调试选项,产生供gdb调试用的可执行文件,生成的可执文件大 小明显比只用-o选项编译汇编连接后的文档大。
8
打开文件
打开文件后,处于命令行模式,按i进行插入模式,或按 shift+:键进入底行模式。 按shift+:键进入底行模式后输入:Set nu
显示行号
9
打开文件
在命令行模式下按i键进入插入模式,可对文件修改,修改后按 esc键及shift+:键进入底行模式,输入q!回车后强制不保存退出。
10
VI命令行模式功能键
(3)底行模式 在该模式下,光标位于屏幕的底行。用户可以进行 文件保存或退出操作,也可以设置编辑环境,如寻找字 符串、列出行号等。
4
启动vi编辑器
• 在命令提示符下输入命令vi,回车后,即可启动vi 编辑器
5
编辑文件
• 启动vi编辑器时,vi编辑器处于命令模式,敲击键盘i键,进 入文本输入模式,接下来可以输入字符,用Backspace或者 Del键删除字符,用回车键控制换行,用上下左右光标键移动 位置。请按下图编辑文件。
26
编译器GCC的使用
2、-o选项,指定输出文档名: 例:gcc -o helloworld hello.c -o意思是Output即需要指定输出的可执行文档的名称。这里的名称 为helloworld。 使用-o选项产生可执行文件过程如下图所示。
由上次实验可知,白色代表着普通文件,蓝色代表着目录, 绿色代表可执行文件。
实验三 linux环境C语言开发工具
一、实验目的: 1、 掌握VI(VIM)的使用方法; 2、 掌握嵌入式C语言的编译方法; 3、 掌握程序的调试和执行方法。
1
实验三 linux环境C语言开发工具
二、实验要求:
1、认真阅读电子版教材,学习VI的使用方法;
2、用Vi编写一简单C语言程序;
3、编程C语言程序;
22
编译器GCC的使用
• gcc最基本的用法是∶ gcc [options] [filenaபைடு நூலகம்es] – options:编译器所需要的编译选项 – filenames:要编译的文件名 gcc编译器的编译选项大约有100多个,其中多数我们根本就用 不到,这里只介绍其中最基本、最常用的参数。 如果 [options]选项选项,gcc就给出预设的可执行文件 a.out。(演示)
13
ESC
ESC
进入末行模式
• 命令模式下输入 : / ? 看到vi编辑器界面左下角出现提示信息,vi编辑 器就进入了末行模式。
14
末行模式下
• 保存但不退出vi编辑器
– :w
• 保存并退出vi编辑器
– :wq
• 不保存退出vi编辑器
– :q – :q!
15
末行模式下
• 另存为 • :w filename – 保存文件,并命名为filename,不退出vi编辑器 • :wq filename – 保存文件,并命名为filename,并退出vi编辑器 • :w! filename – 有相同文件名的文件存在,覆盖它! – 我发现了有重名文件,可是我没有权限看它的内容,但是我 能覆盖它,也实现了改变它内容的目的,这是为什么?
关闭所有告警
允许发出Gcc提供的所有有用的报警信息 把所有的告警信息转化为错误信息,并在告警发生时 终止编译过程
34
GCC选项
三、优化选项 Gcc可以对代码进行优化,它通过编译选项“-On”来控制优化 代码的生成,其中n是一个代表优化级别的整数。对于不同版本的 Gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同, 比较典型的范围是从0变化到2或3。
11
vi编辑器的三种模式切换
• 六种进入方式
– – – – – – i I a A o O 在光标左侧输入正文 在光标所在行的行首输入正文 在光标右侧输入正文 在光标所在行的末尾输入正文 在光标所在行的下面增加新行,并在新行的行首输入正文 在光标所在行的上面增加新行,并在新行的行首输入正文
12
vi编辑器的三种模式
16
末行模式下
• 搜索字符串
– /要搜索的字符串 #向下搜索 – ?要搜索的字符串 #向上搜索
• 输入n键,可以在多个匹配项之间进行切换
17
末行模式下
• vi编辑器在线帮助
– :help
• 仔细阅读帮助文件的开始,如何移动光标,如何 跳转到相应帮助主题,如何从某一主题返回到上 层主题,如何退出帮助?
6
保存退出/退出
• 按Esc键,使vi进入命令模式,然后按shift+:进入底行模式 • 然后输入命令 :wq 文件名 保存退出
–例如 :wq hello.c –注释:wq(write quit的缩写)
• 或者输入命令 :q! 不保存退出
7
打开/新建文件
• vi [目录名] 文件名 如果给出的文件名是目录下不存在的文件,则vi编辑器 会新建一个文件,并等待用户输入信息。如果给出的文件名 是目录下已经存在的文件,则vi编辑器会打开此文件,并显 示文件的内容。 如:vi /etc/passwd 回车后打开/etc目录下的passwd文件 例:在提示符下输入:vi hello.c
vi 有命令行状态和文本编辑两种状态, vi 的命令行状 态的命令丰富,功能强大,在命令行状态下按 Insert 键或 者输入 i、I 、a等字符进入编辑状态,在编辑状态按 Esc键 可以回到命令行状态。
3
vi编辑器的3种模式
(1)命令行模式 用户在用vi编辑文件时,最初进入的为一般模式。 在该模式中可以通过上下移动光标进行“删除字符”或“ 整行删除”等操作,也可以进行“复制”、“粘贴”等操作, 但无法编辑文字。 (2)插入模式 在该模式下,用户才能进行文字编辑输入,用户可 按ESC键回到命令行模式。
不同的优化级别对应不同的优化处理工作。如使用优化选项
“-O”主要进行线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。使用优化选项“-O2”除了完成所有“-
11vi命令行模式功能键12vi编辑器的三种模式切换?六种进入方式i在光标左侧输入正文i在光标所在行的行首输入正文a在光标右侧输入正文a在光标所在行的末尾输入正文o在光标所在行的下面增加新行并在新行的行首输入正文o在光标所在行的上面增加新行并在新行的行首输入正文13?尝试进入vi编辑器文本模式的六种方式?实验一种方式后文本输入模式下按esc键可以使vi编辑器切换到命令模式下按esc键回到命令模式下就可以再实验另一种方式了
19
GCC编译器介绍
文件后缀
.c .a .C;cc;.cxx
说明
C语言源程序 由目标文件构成的档案库文件 C++源程序
.h
.i .ii .m .o .s .S
源程序包含的头文件
经过预处理的C程序 经过预处理的C++程序 Objective-C源程序 编译后的目标文件 汇编语言源程序 经过预编译的汇编程序
链接静态库
连接名为library的库文件
24
编译器GCC的使用
1、没有任何选项:gcc hello.c 结果会在和hello.c相同的目录下产生一个a.out 的可执行文档。
25
编译器GCC的使用
用vi打开hello.c把void修改成int后保存退出,重新 用gcc编译就不会出现警告。
运行生成的可执行文件