版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上嵌网院 讲师:杨行 系列课程Linux基础 源代码的编译和调试 第六章 上嵌网院 课程目标 具备搭建具备搭建linuxlinux系统平台能力系统平台能力 系统安装 具备具备LinuxLinux系统日常维护能力系统日常维护能力 文件,目录结构 linux的常用命令,Vi Shell脚本编程、管道及其重定向 tftp,nfs服务器的配置 熟悉熟悉LinuxLinux系统下的开发环境系统下的开发环境 Gcc,Gdb 上嵌网院 课程安排 第一天第一天 上午:上午:LinuxLinux系统简介和安装系统简介和安装 下午:下午:LinuxLinux安装实际演练安装实际演练 第二天第二天 上午:上午:Li
2、nuxLinux基本操作命令基本操作命令 下午:下午:LinuxLinux基本操作命令实战基本操作命令实战 第三天第三天 上午:上午: Linux Linux进程操作进程操作 下午:下午:LinuxLinux服务器配置服务器配置 第四天第四天 上午:上午:LinuxLinux脚本编程脚本编程 上上 下午:下午:LinuxLinux脚本编程下脚本编程下 第五天第五天 上午:源代码编译和调试上午:源代码编译和调试 下午:下午:多模块软件的编译和链接多模块软件的编译和链接 (预科内容,根据实际情况调整授课天数,(预科内容,根据实际情况调整授课天数,4-104-10天)天) 上 嵌 课前提问 Linu
3、xLinux之下常见的编辑工具有哪些?之下常见的编辑工具有哪些? C C语言如何编译、链接?语言如何编译、链接? 默认生成的默认生成的C C语言可执行文件名是什么?语言可执行文件名是什么? 如何调试源程序?如何调试源程序? 上 嵌 本章目标 LinuxLinux下的常用编辑工具下的常用编辑工具 GCCGCC编译环境编译环境 GDBGDB调试环境调试环境 上 嵌 6 文本编辑器的作用 Linux系统中的配置文件以文本文件的形式保存 Linux管理员需要通过编辑配置文件进行系统管理 文本编辑器的分类 行编辑器与全屏幕编辑器 字符界面编辑器与图形界面编辑器 知识点1-常见的文本编辑器 上 嵌 7 v
4、i Linux学习者需要掌握的第一个文本编辑器 大多数Linux系统中缺省使用的文本编辑器 Emacs 用于编辑程序源代码文件的文本编辑器 nano 在字符界面提供了菜单操作,易用性较好 gedit GNOME图形环境中的文本编辑器 常见的文本编辑器 上 嵌 8 vi编辑器中有三种状态模式 命令模式 输入模式 末行模式 Shell提示符提示符 退出退出vivi file 末行模式末行模式输入模式输入模式 转义命令转义命令 按按Esc键键 文本输入命令文本输入命令 执行完毕或按执行完毕或按Esc键键 命令模式命令模式 vi中三种模式的转换中三种模式的转换 常见的文本编辑器-VI 上 嵌 9 vi
5、编辑器的启动与退出 文件操作 光标移动操作 编辑操作 查找与替换操作 vi编辑器的在线帮助 常见的文本编辑器-VI 上 嵌 10 直接进入编辑环境 $ vi 进入编辑环境并打开(新建)文件 $ vi myfile 退出vi编辑环境 输入末行命令放弃对文件的修改,并退出编辑 器 :q! vi的启动与退出的启动与退出 常见的文本编辑器-VI 上 嵌 11 读取文件 保存文件 另存为文件 退出vi编辑器 常见的文本编辑器-VI 上 嵌 12 保存文件 保存对vi编辑器中已打开文件的修改 :w 另存为文件 将vi编辑器中的内容另存为指定文件名 :w myfile 常见的文本编辑器-VI 上 嵌 13
6、未修改退出 没有对vi编辑器中打开的文件进行修改,或已对 修改进行了保存,直接退出vi编辑器 :q 保存并退出 对vi编辑器中的文件进行保存并退出vi编辑器 :wq 不保存退出 放弃对文件内容的修改,并退出vi编辑器 :q! 常见的文本编辑器-VI 上 嵌 14 编译工具:把一个源程序编译为一个可执行程序 调试工具:能对执行程序进行源码或汇编级调试 软件工程工具:用于协助多人开发或大型软件项 目的管理,如make、CVS、Subvision 其他工具:用于把多个目标文件链接成可执行文 件的链接器,或者用作格式转换的工具。 知识点1-编译工具GCC 上 嵌 /
7、/ / / http:/ http:/ 15 编译工具GCC-参考资源 上 嵌 16 全称为GNU CC ,GNU项目中符合ANSI C标准的编 译系统 编译如C、C+、Object C、Java、Fortran、 Pascal、Modula-3和Ada等多种语言 GCC是可以在多种硬体平台上编译出可执行程序 的超级编译器,其执行效率与一般的编译器相比 平均效率要高20%30% 一个交叉平台编译器 ,适合在嵌入式领域的开发 编译 编译工具GCC 上 嵌 17 GNU Compiler
8、 Collection C, C+, Objective-C, Fortran, Java, Ada GCC 4.3.0 GCC 2.95 July 31, 1999 GCC 3.0 June 18, 2001 GCC 3.2 August 14, 2002 GCC 3.3 May 13, 2003 Mar 5, 2008 December 3, 1997 编译工具GCC 上 嵌 18 GCC编译过程 GCC的编译流程分 为四个步骤: 预处理(Pre- Processing) 编译(Compiling) 汇编 (Assembling) 1. 链接(Linki
9、ng) 编辑器 预处理器 编译器 链接 汇编处理 源代码 *.c 预处理文件 *.i 汇编文件 *.s 汇编文件 *.o 可执行程序 *.exe 上 嵌 19 gcc所支持后缀名解释 .cC原始程序 .C/.cc/.cxxC+原始程序 .mObjective-C原始程序 .i已经过预处理的C原始程序 .ii已经过预处理的C+原始程序 .s/.S汇编语言原始程序 .h预处理文件(头文件) .o目标文件 .a/.so 编译后的库文件 编译工具GCC 上 嵌 分析器:分析器将源语言程序代码转换为汇编语言。因为 要从一种格式转换为另一种格式(C到汇编),所以分析 器需要知道目标机器的汇编语言。 汇编器
10、:汇编器将汇编语言代码转换为CPU可以执行字节 码。 链接器:链接器将汇编器生成的单独的目标文件组合成可 执行的应用程序。链接器需要知道这种目标格式以便工作 。 标准C库:核心的C函数都有一个主要的C库来提供。如果 在应用程序中用到了C库中的函数,这个库就会通过链接 器和源代码连接来生成最终的可执行程序。 编译工具GCC 上 嵌 21 调用cppcpp进行预处理,对源代码文件中的文件包含 (include)、预编译语句(如宏定义define等)进行分 析; 调用cc1cc1进行编译,生成.o为后缀的目标文件; 调用asas进行汇编,汇编语言文件经过预编译和汇 编之后都生成以.o为后缀的目标文件
11、; 调用ld ld进行链接,所有的目标文件被安排在可执 行程序中的恰当的位置。同时,该程序所调用到 的库函数也从各自所在的档案库中链接到合适的 地方。 编译工具GCC 上 嵌 22 GccGcc最基本的用法是最基本的用法是 gcc options filenames gcc options filenames -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件 生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名 称不能和源文件同名。如果不给出这个选项,gcc就
12、给出预设的可执行文件 a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调 试,我们就必须加入这个选项。 -O,对程序进行优化优化编译、连接,采用这个选项,整个源代码会在编译、连 接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但 是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预 编译过程中使用的参数。 -Ldirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表 中,是在链接过程
13、中使用的参数。 编译工具GCC 上 嵌 第一类 C语法错误 错误信息 文件文件source.csource.c中第中第n n行有语法错误行有语法错误(syntex errror)(syntex errror)。有些情 况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要 的是要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语 言的基本教材。 第二类 头文件错误 错误信息 找不到头文件找不到头文件head.h(Can not find include file head.h)head.h(Can not find include file head.h)。 这类错误是源代码文件中
14、的包含头文件有问题,可能的原因有头文 件名错误、指定的头文件所在目录名错误等,也可能是错误地使用 了双引号和尖括号。 23 编译工具GCC-错误类型及应对方法 上 嵌 第三类档案库错误 错误信息链接程序找不到所需的函数库(链接程序找不到所需的函数库(ld: -lm: No such file or directory )。这类错误是与目标文件相连接的函数库有 错误,可能的原因是函数库名错误、指定的函数库所在目录名称 错误等,检查的方法是使用find命令在可能的目录中寻找相应的 函数库名,确定档案库及目录的名称并修改程序中及编译选项中 的名称。 24 编译工具GCC-错误类型及应对方法 上 嵌
15、第四类未定义符号 错误信息有未定义的符号有未定义的符号(Undefined symbol)(Undefined symbol)。这类错误是在 连接过程中出现的,可能有两种原因一是使用者自己定义的函 数或者全局变量所在源代码文件,没有被编译、连接,或者干脆 还没有定义,这需要使用者根据实际情况修改源程序,给出全局 变量或者函数的定义体;二是未定义的符号是一个标准的库函数 ,在源程序中使用了该库函数,而连接过程中还没有给定相应的 函数库的名称,或者是该档案库的目录名称有问题,这时需要使 用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数 库中,确定之后,修改gcc连接选项中的-l和-L项。
16、 25 编译工具GCC-错误类型及应对方法 上 嵌 #include int 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$ ./test 查看更详细的信息: $ gcc v o test test.c $ gcc v o test test.c 26 编译工具GCC-使用实例 上 嵌 27 Pre- processor (cpp / Gcc -E) Com
17、piler (cc1 / Gcc -S) Assemble r (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 -o test.i 用wc命令,查看这两个阶段代码大小: $ wc test.c test.cpp 9 16 127 test.c 842 1934 16498 test.cpp 8
18、51 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源代码中生成目标 代码: $ gcc c test.s o test.o$ gcc c test.s o test.o 方法二,用汇编器从汇编代码生成目标代 码: $ as test.s o test
19、.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 #include Using namespace std; Int main(void) Char cur_work_dirPATH_MAX; Cou
20、t“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 首先使用gcc对test.c进行编译,注意一定要加上 选项-g # # gcc -g test.c -o testgcc -g t
21、est.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 are welcome to change it and/or distribute copies of it under certain conditions. Type show copying to see the condit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年粤教沪科版必修1英语上册阶段测试试卷含答案
- 2025年湘师大新版九年级历史上册月考试卷
- 2025年粤人版高一地理下册月考试卷
- 2025年沪教新版高三历史上册阶段测试试卷
- 2025年冀少新版九年级地理下册月考试卷
- 二零二五年度农户农村电商金融服务合同4篇
- 乳制品2024年新型包装材料采购合同3篇
- 担保合同权利义务协议书(2篇)
- 2025年度木材交易市场入驻经营合同3篇
- 2025版美容养生中心使用权转让合同4篇
- 2023-2024学年度人教版一年级语文上册寒假作业
- 2024医疗销售年度计划
- 税务局个人所得税综合所得汇算清缴
- 人教版语文1-6年级古诗词
- 上学期高二期末语文试卷(含答案)
- 职业发展展示园林
- 七年级下册英语单词默写表直接打印
- 2024版医疗安全不良事件培训讲稿
- 中学英语教学设计PPT完整全套教学课件
- 移动商务内容运营(吴洪贵)项目五 运营效果监测
- 比较思想政治教育学
评论
0/150
提交评论