资源预览内容
第1页 / 共103页
第2页 / 共103页
第3页 / 共103页
第4页 / 共103页
第5页 / 共103页
第6页 / 共103页
第7页 / 共103页
第8页 / 共103页
第9页 / 共103页
第10页 / 共103页
亲,该文档总共103页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Linux环境下的C语言编程 第一部分 Linux下的C编程实战之开发平台搭建 准备工作 建议在PC内存足够大的情况下 不要直接安装Linux操作系统 最好把它安装在运行VMWare虚拟机软件的Windows平台上 如下图 1 Vim和Emacs编辑器 在Linux平台下 可用任意一个文本编辑工具编辑源代码 Vim viimprove 是Linux下功能强大的编辑器 是由UNIX系统下的传统文本编辑器vi发展而来 是vi的一个增强版本 有彩色和高亮等特性 对编程有很大帮助 主菜单 编程 viImproved命令来运行x windows下的vim Emacs即EditorMACroS 编辑器宏 的缩写 是一种强大的文本编辑器 在程序员和其他以技术工作为主的计算机用户中广受欢迎 使用vim编辑helloworld程序 使用emacs编辑helloworld程序 2 GCC编译器 GCC是Linux平台下最重要的开发工具 它是GNU的C和C 编译器 其基本用法为 gcc options filenames 该命令按编译选项 参数options 指定的操作对给定的文件进行编译处理 编译一输出 HelloWorld 的程序 main printf HelloWorld n 2 GCC编译器 最简单的编译方法是不指定任何编译选项 它会为目标程序生成默认的文件名a outgcchelloworld co选项 编译来为将产生的可执行文件指定一个文件名 例如 将上述名为helloworld c的C程序编译为名叫helloworld的可执行文件 输入如下命令 gcc ohelloworldhelloworld c 2 GCC编译器 常用选项 c选项 告诉GCC仅把源代码 c文件 编译为目标代码 o文件 而跳过汇编和连接的步骤 它能使编译多个C程序时的速度更快且容易管理 例如用户将已编辑好的test c文件编译成名为test o的目标文件 可以使用命令gcc ctest cs选项 告诉GCC在为C代码产生了汇编语言文件后停止编译 GCC产生的汇编语言文件的缺省扩展名是 s 将生成helloworld c的汇编代码 使用的是AT T汇编 用emacs打开汇编代码如下图 用emacs打开的Hello c的汇编代码 2 GCC编译器 常用选项 E选项 指示编译器仅对输入文件进行预处理 但不汇编和连接O O1 选项 告诉GCC对源代码进行基本优化从而使得程序执行地更快 而 O2选项告诉GCC产生尽可能小和尽可能快的代码 使用 O2选项编译的速度比使用 O时慢 但产生的代码执行速度会更快 Wall选项 显示附加的警告信息 例如在上述程序中去掉return0 语句 之后重新编译gcc Wall ohellohello c将得到的警告信息 hello c 5 warning controlreachesendofnon voidfunction 3 GDB调试器 GCC用于编译程序 而Linux的另一个GNU工具gdb则用于调试程序 gdb是一个用来调试C和C 程序的强力调试器 通过它进行一系列调试工作 gdb主要提供一下功能 监视程序中变量的值得变化设置断点 使程序在指定的代码上暂停执行 便于观察单步执行代码分析崩溃程序产生的core文件 3 GDB调试器 gdb最常用的命令如下file 装入想要调试的可执行文件 kill 终止正在调试的程序 list 列表显示源代码 next 执行一行源代码但不进入函数内部 step 执行一行源代码而且进入函数内部 run 执行当前被调试的程序quit 终止gdbwatch 监视一个变量的值break 在代码里设置断点 程序执行到这里时挂起 3 GDB调试器 举例说明怎样用GDB调试一个求0 1 2 3 99的程序 Filename sum c main inti sum sum 0 for i 0 i 100 i sum i printf thesumof1 2 is d sum 3 GDB调试器 3 GDB调试器 执行如下命令编译sum c 加 g选项产生debug信息 gcc g osumsum c在命令行上键入gdbsum并按回车键就可以开始调试sum了 再运行run命令执行sum 屏幕上将看到如下内容 3 GDB调试器 list命令 list命令用于列出源代码 对上述程序运行list 将出现如下画面 源代码被标行号 3 GDB调试器 根据列出的源程序 如果将断点设置在第4行 只需在gdb命令行提示符下键入如下命令设置断点 gdb break4Breakpoint1at0 x8048338 filesum cline4这时再run 程序会停止在第4行 Startingprogram root sumBreakpoint1 main atsum cline44sum 0 3 GDB调试器 设置断点的另一种语法是break 它在进入指定函数 function 时停住 相反的 clear用于清除所有的已定义的断点clear清除设置在函数上的断点 clear则清除设置在指定行上的断点 3 GDB调试器 watch命令 用于观查变量或表达式的值watch命令观查sum变量只需要运行 watchsumwatch命令观查表达式 watch为表达式 变量 expr设置一个观察点 变量表达式值有变化时 程序会停止执行 要观查当前设置的watch 可以使用infowatchpoints命令 3 GDB调试器 next step命令 next step用于单步执行 在执行的过程中 被watch变量的变化情况将实时呈现 分别显示Oldvalue和Newvalue 如下图 next step命令的区别在于step遇到函数调用 会跳转到该函数定义的开始行去执行 而next则不进入到函数内部 它把函数调用语句当作一条普通语句执行 4 Make 编译和连接的区别编译器使用源码文件来产生某种形式的目标文件 在编译过程中 外部的符号参考并没有被解释或替换 即外部全局变量和函数并没有被找到 因此 在编译阶段所报的错误一般都是语法错误 连接器则用于连接目标文件和程序包 生成一个可执行程序 在连接阶段 一个目标文件中对别的文件中的符号的参考被解释 如果有符号不能找到 会报告连接错误 4 Make 编译和连接的一般步骤是 第一阶段把源文件一个一个的编译成目标文件 第二阶段把所有的目标文件加上需要的程序包连接成一个可执行文件 这样的过程需要使用大量的gcc命令 而make则使从大量源文件的编译和连接工作中解放出来 综合为一步完成 4 Make GNUMake的主要工作是读进一个文本文件 称为makefile makefile文件记录了哪些文件 目的文件 目的文件不一定是最后的可执行程序 它可以是任何一种文件 由哪些文件 依靠文件 产生 用什么命令来产生 Make依靠此makefile中的信息检查磁盘上的文件 如果目的文件的创建或修改时间比它的一个依靠文件旧的话 make就执行相应的命令 以便更新目的文件 4 Make makefile文件的编写makefile文件是一个文本文件 用于描述整个项目和各个文件之间的依赖关系 它由多个规则组成 makefile文件的规则遵循以下结构 remark注释行target file1file2 二进制文件或者目标文件command1命令command2 4 Make 例如 下面三个文件 add h用于声明add函数 add c提供两个整数相加的函数体 而main c中调用add函数 filename add h externintadd inti intj filename add c intadd inti intj returni j filename main c include add h main inta b a 2 b 3 printf thesumofa bis d add a b 怎样为上述三个文件产生makefile呢 4 Make 为上述三个文件产生makefile的方法如下 test main oadd ogccmain oadd o otestmain o main cadd hgcc cmain c omain oadd o add cadd hgcc cadd c oadd o 4 Make 上述makefile文件的含义利用add c和add h文件执行gcc cadd c oadd o命令产生add o目标代码 利用main c和add h文件执行gcc cmain c omain o命令产生main o目标代码 最后利用main o和add o文件 两个模块的目标代码 执行gccmain oadd o otest命令产生可执行文件test 可以使用gcc MMmain c自动寻找源文件中的头文件 并形成依赖关系 输出为 main omain cadd h 4 Make 可在makefile中加入变量 另外 环境变量在make过程中也被解释成make的变量 这些变量是大小写敏感的 一般使用大写字母 要定义一个变量 只需要在一行的开始写下这个变量的名字 后面跟一个 号 再跟变量的值 引用变量的方法是写一个 符号 后面跟 变量名 4 Make 把前面的makefile利用变量重写一遍 并假设使用 Wall O g编译选项 OBJS main oadd oCC gccCFLAGS Wall O gtest OBJS CC OBJS otestmain o main cadd h CC CFLAGS cmain c omain oadd o add cadd h CC CFLAGS cadd c oadd o 4 Make makefile中还可定义清除 clean 目标 可用来清除编译过程中产生的中间文件 例如在上述makefile文件中添加下列代码 clean rm f o运行makeclean时 将执行rm f o命令 删除所有编译过程中产生的中间文件 4 Make Make的运行GUNmake默认在当前的目录下一次查找GUNmake文件 Makefile文件和makefile文件 找到后读取文件执行 给make命令指定一个特殊名字的makefile文件make fhchen mk 4 Make 自己动手编写makefile仍然是很复杂和烦琐的 而且很容易出错 因此 GNU也提供了Automake和Autoconf来辅助快速自动产生makefile 4 Make 使用autoconf和automake来进行自动化配置和生成Makefile的流程可以概括如下 运行autoscan命令 将configure scan文件重命名为configure in 并修改configure in文件 运行aclocal命令得到aclocal m4文件 运行autoconf命令得到configure文件 在工程目录下新建Makefile am文件 如果存在子目录 子目录中也要创建此文件 将 usr share automake 1 X 目录下的depcomp和compile文件复制到需要处理目录下 运行automake a命令得到Makefile in文件 运行 configure脚本 4 Make 从例子程序helloworld开始 过程如下 新建三个文件 helloworld cconfigure inMakefile am然后执行aclocal autoconf automake add missing configure make helloworldMakefile被产生出来 而且可以将helloworld c编译通过 小结 本部分主要阐述了Linux程序的编写 编译 调试方法及make 实际上是引导学习怎样在Linux下编程 为后续章节做好准备 第二部分Linux下的C编程实战之文件系统编程 Linux平台下文件编程 在Linux平台下对文件编程可以使用两类函数 Linux操作系统文
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号