




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上嵌网院 讲师:杨行系列课程Linux基础源代码的编译和调试第六章上嵌网院 课程目标具备搭建具备搭建linuxlinux系统平台能力系统平台能力系统安装具备具备LinuxLinux系统日常维护能力系统日常维护能力文件,目录结构linux的常用命令,ViShell脚本编程、管道及其重定向tftp,nfs服务器的配置熟悉熟悉LinuxLinux系统下的开发环境系统下的开发环境Gcc,Gdb上嵌网院 课程安排 第一天第一天 上午:上午:LinuxLinux系统简介和安装系统简介和安装 下午:下午:LinuxLinux安装实际演练安装实际演练 第二天第二天 上午:上午:LinuxLinux基本操作命令
2、基本操作命令 下午:下午:LinuxLinux基本操作命令实战基本操作命令实战 第三天第三天 上午:上午: Linux Linux进程操作进程操作 下午:下午:LinuxLinux服务器配置服务器配置 第四天第四天 上午:上午:LinuxLinux脚本编程脚本编程 上上 下午:下午:LinuxLinux脚本编程下脚本编程下 第五天第五天 上午:源代码编译和调试上午:源代码编译和调试 下午:下午:多模块软件的编译和链接多模块软件的编译和链接(预科内容,根据实际情况调整授课天数,(预科内容,根据实际情况调整授课天数,4-104-10天)天) 上 嵌课前提问LinuxLinux之下常见的编辑工具有哪
3、些?之下常见的编辑工具有哪些?C C语言如何编译、链接?语言如何编译、链接?默认生成的默认生成的C C语言可执行文件名是什么?语言可执行文件名是什么?如何调试源程序?如何调试源程序?上 嵌本章目标LinuxLinux下的常用编辑工具下的常用编辑工具GCCGCC编译环境编译环境GDBGDB调试环境调试环境上 嵌6 文本编辑器的作用 Linux系统中的配置文件以文本文件的形式保存 Linux管理员需要通过编辑配置文件进行系统管理 文本编辑器的分类 行编辑器与全屏幕编辑器 字符界面编辑器与图形界面编辑器 知识点1-常见的文本编辑器上 嵌7 vi Linux学习者需要掌握的第一个文本编辑器 大多数Li
4、nux系统中缺省使用的文本编辑器 Emacs 用于编辑程序源代码文件的文本编辑器 nano 在字符界面提供了菜单操作,易用性较好 gedit GNOME图形环境中的文本编辑器常见的文本编辑器上 嵌8 vi编辑器中有三种状态模式 命令模式 输入模式 末行模式Shell提示符提示符退出退出vivi file末行模式末行模式输入模式输入模式转义命令转义命令按按Esc键键文本输入命令文本输入命令执行完毕或按执行完毕或按Esc键键命令模式命令模式vi中三种模式的转换中三种模式的转换常见的文本编辑器-VI上 嵌9 vi编辑器的启动与退出 文件操作 光标移动操作 编辑操作 查找与替换操作 vi编辑器的在线帮
5、助 常见的文本编辑器-VI上 嵌10 直接进入编辑环境 $ vi 进入编辑环境并打开(新建)文件$ vi myfile 退出vi编辑环境 输入末行命令放弃对文件的修改,并退出编辑器:q! vi的启动与退出的启动与退出常见的文本编辑器-VI上 嵌11 读取文件 保存文件 另存为文件 退出vi编辑器 常见的文本编辑器-VI上 嵌12 保存文件 保存对vi编辑器中已打开文件的修改:w 另存为文件 将vi编辑器中的内容另存为指定文件名:w myfile常见的文本编辑器-VI上 嵌13 未修改退出 没有对vi编辑器中打开的文件进行修改,或已对修改进行了保存,直接退出vi编辑器:q 保存并退出 对vi编辑
6、器中的文件进行保存并退出vi编辑器:wq 不保存退出 放弃对文件内容的修改,并退出vi编辑器:q!常见的文本编辑器-VI上 嵌14 编译工具:把一个源程序编译为一个可执行程序 调试工具:能对执行程序进行源码或汇编级调试 软件工程工具:用于协助多人开发或大型软件项目的管理,如make、CVS、Subvision 其他工具:用于把多个目标文件链接成可执行文件的链接器,或者用作格式转换的工具。知识点1-编译工具GCC上 嵌 / / / / http:/ h
7、ttp:/ 嵌16 全称为GNU CC ,GNU项目中符合ANSI C标准的编译系统 编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言 GCC是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30% 一个交叉平台编译器 ,适合在嵌入式领域的开发编译 编译工具GCC上 嵌17 GNU Compiler Collection C, C+, Objective-C, Fortran, Java, Ada GCC 4.3.0 GCC 2.95 July 31,
8、1999 GCC 3.0 June 18, 2001 GCC 3.2 August 14, 2002 GCC 3.3May 13, 2003 Mar 5, 2008 December 3, 1997 编译工具GCC上 嵌18GCC编译过程 GCC的编译流程分为四个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling)1. 链接(Linking)编辑器预处理器编译器链接汇编处理源代码 *.c预处理文件 *.i汇编文件 *.s汇编文件 *.o可执行程序 *.exe上 嵌19 gcc所支持后缀名解释 .cC原始程序 .C/.cc/.cxxC+原始程序
9、 .mObjective-C原始程序 .i已经过预处理的C原始程序 .ii已经过预处理的C+原始程序 .s/.S汇编语言原始程序 .h预处理文件(头文件) .o目标文件 .a/.so 编译后的库文件编译工具GCC上 嵌 分析器:分析器将源语言程序代码转换为汇编语言。因为要从一种格式转换为另一种格式(C到汇编),所以分析器需要知道目标机器的汇编语言。 汇编器:汇编器将汇编语言代码转换为CPU可以执行字节码。 链接器:链接器将汇编器生成的单独的目标文件组合成可执行的应用程序。链接器需要知道这种目标格式以便工作。 标准C库:核心的C函数都有一个主要的C库来提供。如果在应用程序中用到了C库中的函数,这
10、个库就会通过链接器和源代码连接来生成最终的可执行程序。编译工具GCC上 嵌21 调用cppcpp进行预处理,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析; 调用cc1cc1进行编译,生成.o为后缀的目标文件; 调用asas进行汇编,汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件; 调用ld ld进行链接,所有的目标文件被安排在可执行程序中的恰当的位置。同时,该程序所调用到的库函数也从各自所在的档案库中链接到合适的地方。编译工具GCC上 嵌22GccGcc最基本的用法是最基本的用法是 gcc options filenames gcc o
11、ptions filenames -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译
12、、连接的速度就相应地要慢一些。-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。-Ldirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在链接过程中使用的参数。编译工具GCC上 嵌 第一类 C语法错误 错误信息 文件文件source.csource.c中第中第n n行有语法错误行有语法错误(syntex errror)(syntex errror)。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要的是要保持清醒的头脑,不要被
13、其吓倒,必要的时候再参考一下C语言的基本教材。 第二类 头文件错误 错误信息 找不到头文件找不到头文件head.h(Can not find include file head.h)head.h(Can not find include file head.h)。这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。 23编译工具GCC-错误类型及应对方法上 嵌 第三类档案库错误 错误信息链接程序找不到所需的函数库(链接程序找不到所需的函数库(ld: -lm: No such file or directory )
14、。这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。 24编译工具GCC-错误类型及应对方法上 嵌 第四类未定义符号 错误信息有未定义的符号有未定义的符号(Undefined symbol)(Undefined symbol)。这类错误是在连接过程中出现的,可能有两种原因一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未
15、定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项中的-l和-L项。 25编译工具GCC-错误类型及应对方法上 嵌#includeint main(void) int i,j; j=0; i=j+1; printf(“hello,worldn”); printf(“the result is %dn”,i);编译: $ gcc o test test.c$ gcc o test test.c执行: $ ./test
16、$ ./test查看更详细的信息: $ gcc v o test test.c $ gcc v o test test.c 26编译工具GCC-使用实例上 嵌27Pre-processor(cpp / Gcc -E)Compiler(cc1 / Gcc -S)Assembler(as / Gcc -c)Linker(ld)hello.c(text)hello.i(text)hello.s(text)hello.o(binary)hello(binary)printf.o(binary)编译工具GCC-使用实例上 嵌 $ gcc E test.c -o test.i$ gcc E test.c
17、-o test.i 用wc命令,查看这两个阶段代码大小: $ wc test.c test.cpp 9 16 127 test.c 842 1934 16498 test.cpp 851 1950 16625 总用量 test.cpp比test.c增加了很多内容,主要是放在系统提供的include文件中的。28编译工具GCC-生成预处理代码上 嵌 检查语法错误检查语法错误, ,并生成汇编文件并生成汇编文件 $ gcc S test.c o test.s $ gcc S test.c o test.s 29编译工具GCC-生成汇编代码上 嵌 方法一,用gcc直接从C源代码中生成目标代码:$ gc
18、c c test.s o test.o$ gcc c test.s o test.o 方法二,用汇编器从汇编代码生成目标代码:$ as test.s o test.o $ as test.s o test.o 30编译工具GCC-生成目标代码上 嵌将目标程序链接库资源,生成可执行程序将目标程序链接库资源,生成可执行程序$ gcc c test.s o test$ gcc c test.s o test./test./test编译工具GCC-生成可执行程序上 嵌设计并实现一个程序MyPWD,能够查询当前用户的绝对路径。功能类似与shell的pwd命令。#include #include #inc
19、lude Using namespace std;Int main(void)Char cur_work_dirPATH_MAX;Cout“Current Max Path Length is ”PATH_MAXendl;If( getcwd( cur_work_dir, PATH_MAX ) =NULL ) Perror( “ Couldnt get current working directory!” ); Return 1;Cout“Current working directory is ” cur_work_direndl;Return 0;编译工具GCC-练习题上 嵌33 首先使
20、用gcc对test.c进行编译,注意一定要加上选项-g # # gcc -g test.c -o testgcc -g test.c -o test # gdb test gdb test GNU gdb Red Hat Linux (-1.21rh)Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type show copying to see the condition
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑马培训考试题及答案
- 过程量具考试题及答案
- 国画写意考试题及答案
- 公文培训考试题及答案
- 工程物资考试题及答案
- 高处安装考试题及答案
- 放射知识考试题及答案
- (正式版)DB15∕T 3674-2024 《谷子二段式机械化收获技术规范》
- 杜塞理论考试题及答案
- 企业内审流程与执行检查清单
- 解除合同协议书简单版通用版(2篇)
- GB/T 25070-2010信息安全技术信息系统等级保护安全设计技术要求
- GB/T 17742-1999中国地震烈度表
- VEX智能机器人培训课程课件
- 医学影像学《X线造影检查技术》精品课件
- 锚喷支护结构的设计与施工精选课件
- 狼牙山五壮士同步测试 省赛获奖
- 第七章-大学生创业实践案例课件
- 全尺寸测量报告FAI
- 塑料厂安全风险分级管控清单
- 肠道菌群与人体代谢疾病.ppt
评论
0/150
提交评论