Linux-环境下的C语言编程ppt课件.ppt
《Linux-环境下的C语言编程ppt课件.ppt》由会员分享,可在线阅读,更多相关《Linux-环境下的C语言编程ppt课件.ppt(103页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux Linux 环境下的环境下的 C C语言编程语言编程第一部分第一部分: : Linux Linux下的下的C C编程实战之开编程实战之开发平台搭建发平台搭建准备工作准备工作n建议在建议在PC内存足够大的情况下,不要直接安装内存足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行操作系统,最好把它安装在运行VMWare虚拟机软件虚拟机软件的的Windows平台上,如下图:平台上,如下图: 1. Vim1. Vim和和EmacsEmacs编辑器编辑器n在在Linux平台下,可用任意一个文本编辑工具编辑源代码。平台下,可用任意一个文本编辑工具编辑源代码。nVim(vi im
2、prove)是)是Linux下功能强大的编辑器,是由下功能强大的编辑器,是由UNIX系统下的传统文本编辑器系统下的传统文本编辑器vi发展而来,是发展而来,是vi的一个增强的一个增强版本,有彩色和高亮等特性,对编程有很大帮助。主菜单版本,有彩色和高亮等特性,对编程有很大帮助。主菜单-编编程程-vi Improved命令来运行命令来运行x-windows下的下的vim。nEmacs即即Editor MACroS(编辑器宏编辑器宏)的缩写,是一种强大的的缩写,是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。中广受欢迎。使
3、用使用vimvim编辑编辑helloworldhelloworld程序程序使用使用emacsemacs编辑编辑helloworldhelloworld程序程序2.2.GCC编译器编译器nGCC是是Linux平台下最重要的开发工具,它是平台下最重要的开发工具,它是GNU的的C和和C+编译器,其基本用法为:编译器,其基本用法为:ngcc options filenames 该命令按编译选项(参数该命令按编译选项(参数options)指定的操作对给)指定的操作对给定的文件进行编译处理。定的文件进行编译处理。n编译一输出编译一输出“Hello World”的程序:的程序: main() printf(
4、Hello Worldn);2.2.GCC编译器编译器n最简单的编译方法是不指定任何编译选项,它会为目标最简单的编译方法是不指定任何编译选项,它会为目标程序生成默认的文件名程序生成默认的文件名 a.outgcc o选项:编译来为将产生的可执行文件指定一个文件名。选项:编译来为将产生的可执行文件指定一个文件名。例如,将上述名为例如,将上述名为helloworld.c的的C程序编译为名叫程序编译为名叫helloworld的可执行文件,输入如下命令:的可执行文件,输入如下命令:gcc -o helloworld helloworld.c2.2.GCC编译器编译器- -常用选项常用选项nc选项:告诉选
5、项:告诉GCC仅把源代码仅把源代码(.c文件文件)编译为目标代码编译为目标代码(.o文件文件)而跳过汇编和连接的步骤;它能使编译多个而跳过汇编和连接的步骤;它能使编译多个C程序时的速度更程序时的速度更快且容易管理。例如用户将已编辑好的快且容易管理。例如用户将已编辑好的test.c文件编译成名为文件编译成名为test.o的目标文件。可以使用命令的目标文件。可以使用命令 gcc -c s选项:告诉选项:告诉GCC 在为在为 C代码产生了汇编语言文件后停止编译。代码产生了汇编语言文件后停止编译。GCC 产生的汇编语言文件的缺省扩展名是产生的汇编语言文件的缺省扩展名是.s。将生成。将生成hellowo
6、rld.c的汇编代码,使用的是的汇编代码,使用的是AT&T汇编。用汇编。用emacs打开打开汇编代码如下图。汇编代码如下图。用用emacs打开的打开的Hello.c的汇编代码的汇编代码2.2.GCC编译器编译器- -常用选项常用选项nE选项:指示编译器仅对输入文件进行预处理,但不汇编和连接选项:指示编译器仅对输入文件进行预处理,但不汇编和连接nO(-O1)选项:告诉)选项:告诉GCC对源代码进行基本优化从而使得程序对源代码进行基本优化从而使得程序执行地更快;而执行地更快;而-O2选项告诉选项告诉GCC产生尽可能小和尽可能快的代产生尽可能小和尽可能快的代码。使用码。使用-O2选项编译的速度比使用
7、选项编译的速度比使用-O时慢,但产生的代码执行时慢,但产生的代码执行速度会更快。速度会更快。nWall 选项:显示附加的警告信息。例如在上述程序中去掉选项:显示附加的警告信息。例如在上述程序中去掉 return 0;语句,之后重新编译语句,之后重新编译 gcc Wall o hello hello.c将得到的警告信息:将得到的警告信息:hello.c : 5:warning:control reaches end of non-void function3. 3. GDB 调试器调试器nGCC用于编译程序,而用于编译程序,而Linux的另一个的另一个GNU工具工具gdb则用于调试程则用于调试程
8、序。序。gdb是一个用来调试是一个用来调试C和和C+程序的强力调试器,通过它进行程序的强力调试器,通过它进行一系列调试工作。一系列调试工作。ngdb主要提供一下功能主要提供一下功能:n监视程序中变量的值得变化监视程序中变量的值得变化n设置断点,使程序在指定的代码上暂停执行,便于观察设置断点,使程序在指定的代码上暂停执行,便于观察n单步执行代码单步执行代码n分析崩溃程序产生的分析崩溃程序产生的core文件文件3. 3. GDB 调试器调试器ngdb最常用的命令如下最常用的命令如下nfile:装入想要调试的可执行文件。:装入想要调试的可执行文件。nkill:终止正在调试的程序。:终止正在调试的程序
9、。 nlist:列表显示源代码。:列表显示源代码。 nnext:执行一行源代码但不进入函数内部。:执行一行源代码但不进入函数内部。 nstep:执行一行源代码而且进入函数内部。:执行一行源代码而且进入函数内部。 nrun:执行当前被调试的程序:执行当前被调试的程序 nquit:终止:终止gdbnwatch:监视一个变量的值:监视一个变量的值 nbreak:在代码里设置断点,程序执行到这里时挂起:在代码里设置断点,程序执行到这里时挂起 3. 3. GDB 调试器调试器n举例说明怎样用举例说明怎样用GDB调试一个求调试一个求0+1+2+3+99的程序:的程序:/* Filename:sum.c *
10、/main() int i, sum; sum = 0; for (i = 0; i 100; i+) sum + = i; printf(the sum of 1+2+.+ is %d, sum);3. 3. GDB 调试器调试器3. 3. GDB 调试器调试器n执行如下命令编译执行如下命令编译sum.c(加(加-g选项产生选项产生debug信息):信息): gcc g o sum 在命令行上键入在命令行上键入gdb sum并按回车键就可以开始调试并按回车键就可以开始调试sum了,了,再运行再运行run命令执行命令执行sum,屏幕上将看到如下内容:,屏幕上将看到如下内容: 3. 3. GDB
11、 调试器调试器nlist命令:命令:list命令用于列出源代码,对上述程序运行命令用于列出源代码,对上述程序运行list,将,将出现如下画面(源代码被标行号):出现如下画面(源代码被标行号):3. 3. GDB 调试器调试器n根据列出的源程序,如果将断点设置在第根据列出的源程序,如果将断点设置在第4行,只需在行,只需在gdb 命令行提示符下键入如下命令设置断点:命令行提示符下键入如下命令设置断点:n(gdb)break 4nBreakpoint 1 at 0 x8048338:file sum.c line 4n这时再这时再run,程序会停止在第,程序会停止在第4行:行:nStarting p
12、rogram:/root/sumnBreakpoint 1,main() at sum.c line 4n4 sum=03. 3. GDB 调试器调试器n设置断点的另一种语法是设置断点的另一种语法是 break ,它在进入,它在进入指定函数(指定函数(function)时停住。)时停住。n相反的,相反的,clear用于清除所有的已定义的断点用于清除所有的已定义的断点nclear 清除设置在函数上的断点;清除设置在函数上的断点;nclear 则清除设置在指定行上的断点。则清除设置在指定行上的断点。3. 3. GDB 调试器调试器nwatch命令:用于观查变量或表达式的值命令:用于观查变量或表达式
13、的值nwatch命令观查命令观查sum变量只需要运行:变量只需要运行:watch sumnwatch命令观查表达式:命令观查表达式:watch 为表达式(变量)为表达式(变量)expr设置一个观察点,变量表达式值设置一个观察点,变量表达式值有变化时,程序会停止执行。有变化时,程序会停止执行。n要观查当前设置的要观查当前设置的watch,可以使用,可以使用info watchpoints命令。命令。3. 3. GDB 调试器调试器nnext、step命令:命令:nnext、step用于单步执行,在执行的过程中,被用于单步执行,在执行的过程中,被watch变量的变化情况将实时呈现变量的变化情况将实
14、时呈现(分别显示分别显示Old value和和New value),如下图:,如下图:nnext、step命令的区别在于命令的区别在于step遇到函数调用,会遇到函数调用,会跳转到该函数定义的开始行去执行,而跳转到该函数定义的开始行去执行,而next则不则不进入到函数内部,它把函数调用语句当作一条普进入到函数内部,它把函数调用语句当作一条普通语句执行。通语句执行。4.Make4.Maken编译和连接的区别编译和连接的区别n编译器使用源码文件来产生某种形式的目标文件,在编编译器使用源码文件来产生某种形式的目标文件,在编译过程中,外部的符号参考并没有被解释或替换(即外译过程中,外部的符号参考并没有
15、被解释或替换(即外部全局变量和函数并没有被找到)。因此,在编译阶段部全局变量和函数并没有被找到)。因此,在编译阶段所报的错误一般都是语法错误。所报的错误一般都是语法错误。n连接器则用于连接目标文件和程序包,生成一个可执行连接器则用于连接目标文件和程序包,生成一个可执行程序。在连接阶段,一个目标文件中对别的文件中的符程序。在连接阶段,一个目标文件中对别的文件中的符号的参考被解释,如果有符号不能找到,会报告连接错号的参考被解释,如果有符号不能找到,会报告连接错误。误。4.Make4.Maken编译和连接的一般步骤是:编译和连接的一般步骤是:n第一阶段把源文件一个一个的编译成目标文件,第一阶段把源文
16、件一个一个的编译成目标文件,n第二阶段把所有的目标文件加上需要的程序包连接第二阶段把所有的目标文件加上需要的程序包连接成一个可执行文件。成一个可执行文件。n这样的过程需要使用大量的这样的过程需要使用大量的gcc命令。而命令。而make则使从则使从大量源文件的编译和连接工作中解放出来,综合为一大量源文件的编译和连接工作中解放出来,综合为一步完成步完成。4.Make4.MakenGNU Make的主要工作是读进一个文本文件,称为的主要工作是读进一个文本文件,称为makefile。nmakefile文件记录了哪些文件(目的文件,目的文件文件记录了哪些文件(目的文件,目的文件不一定是最后的可执行程序,
17、它可以是任何一种文件)不一定是最后的可执行程序,它可以是任何一种文件)由哪些文件(依靠文件)产生,用什么命令来产生。由哪些文件(依靠文件)产生,用什么命令来产生。nMake依靠此依靠此makefile中的信息检查磁盘上的文件,如中的信息检查磁盘上的文件,如果目的文件的创建或修改时间比它的一个依靠文件旧果目的文件的创建或修改时间比它的一个依靠文件旧的话,的话,make就执行相应的命令,以便更新目的文件。就执行相应的命令,以便更新目的文件。4.Make4.Makenmakefile文件的编写文件的编写nmakefile文件是一个文本文件,用于描述整个项目和各个文件是一个文本文件,用于描述整个项目和
18、各个文件之间的依赖关系。它由多个规则组成。文件之间的依赖关系。它由多个规则组成。nmakefile文件的规则遵循以下结构文件的规则遵循以下结构n#remark 注释行注释行ntarget:file1 file2 二进制文件或者目标文件二进制文件或者目标文件ncommand1 命令命令ncommand2n4.Make4.Maken例如例如: 下面三个文件,下面三个文件,add.h用于声明用于声明add函数,函数,add.c提提供两个整数相加的函数体,而供两个整数相加的函数体,而main.c中调用中调用add函数:函数: /* filename:add.h */extern int add(int
19、 i, int j);/* filename:add.c */int add(int i, int j) return i + j;/* filename:main.c */#include add.hmain() int a, b; a = 2; b = 3; printf(the sum of a+b is %d, add(a + b);怎样为上述三个文件产生怎样为上述三个文件产生makefile呢?呢?4.Make4.Maken为上述三个文件产生为上述三个文件产生makefile的方法如下:的方法如下: test : main.o add.o gcc main.o add.o -o te
20、st main.o : main.c add.h gcc -c main.c -o main.o add.o : add.c add.h gcc -c add.c -o add.o 4.Make4.Maken上述上述makefile文件的含义文件的含义n利用利用add.c和和add.h文件执行文件执行gcc -c add.c -o add.o命令产生命令产生add.o目标代码。目标代码。n利用利用main.c和和add.h文件执行文件执行gcc -c main.c -o main.o命令命令产生产生main.o目标代码。目标代码。n最后利用最后利用main.o和和add.o文件(两个模块的目标
21、代码)执文件(两个模块的目标代码)执行行gcc main.o add.o -o test命令产生可执行文件命令产生可执行文件test。n可以使用可以使用gcc -MM main.c自动寻找源文件中的头文件,并自动寻找源文件中的头文件,并形成依赖关系。形成依赖关系。n输出为:输出为:main.o main.c add.h4.Make4.Maken可在可在makefile中加入变量。另外,环境变量在中加入变量。另外,环境变量在make过程中过程中也被解释成也被解释成make的变量。这些变量是大小写敏感的,一般的变量。这些变量是大小写敏感的,一般使用大写字母。使用大写字母。n要定义一个变量,只需要在
22、一行的开始写下这个变量的名要定义一个变量,只需要在一行的开始写下这个变量的名字,后面跟一个字,后面跟一个=号,再跟变量的值。引用变量的方法是写号,再跟变量的值。引用变量的方法是写一个一个$符号,后面跟(变量名)。符号,后面跟(变量名)。4.Make4.Maken把前面的把前面的 makefile 利用变量重写一遍(并假设使用利用变量重写一遍(并假设使用-Wall -O g编译选项):编译选项):nOBJS = main.o add.onCC = gccnCFLAGS = -Wall -O -gntest : $(OBJS)n$(CC) $(OBJS) -o testnmain.o : main
23、.c add.hn$(CC) $(CFLAGS) -c main.c -o main.onadd.o : add.c add.hn$(CC) $(CFLAGS) -c add.c -o add.o 4.Make4.Makenmakefile 中还可定义清除(中还可定义清除(clean)目标,可用来清除)目标,可用来清除编译过程中产生的中间文件,例如在上述编译过程中产生的中间文件,例如在上述makefile文件文件中添加下列代码:中添加下列代码: nclean: rm -f *.on运行运行make clean时,将执行时,将执行rm -f *.o命令,删除所有编命令,删除所有编译过程中产生的中
24、间文件。译过程中产生的中间文件。4.Make4.MakenMake的运行的运行nGUN make默认在当前的目录下一次查找默认在当前的目录下一次查找GUNmake文件,文件,Makefile文件和文件和makefile文件,文件,找到后读取文件执行。找到后读取文件执行。n给给make命令指定一个特殊名字的命令指定一个特殊名字的makefile文件文件nmake f hchen.mk4.Make4.Maken自己动手编写自己动手编写makefile仍然是很复杂和烦琐的,而且很仍然是很复杂和烦琐的,而且很容易出错。因此,容易出错。因此,GNU也提供了也提供了Automake和和Autoconf来辅
25、助快速自动产生来辅助快速自动产生makefile。4.Make4.Maken使用使用autoconf和和automake来进行自动化配置和生成来进行自动化配置和生成Makefile的流程可以概括如下:的流程可以概括如下:n运行运行autoscan命令。命令。n将将configure.scan文件重命名为文件重命名为configure.in,并修改,并修改configure.in文件。文件。n运行运行aclocal命令得到命令得到aclocal.m4文件。文件。n运行运行autoconf命令得到命令得到configure文件。文件。n在工程目录下新建在工程目录下新建Makefile.am文件,如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 环境 语言 编程 ppt 课件
限制150内