![实验1交叉编译工具链建立实验_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/067e71c5-5948-487c-8ca8-69b2634fd64d/067e71c5-5948-487c-8ca8-69b2634fd64d1.gif)
![实验1交叉编译工具链建立实验_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/067e71c5-5948-487c-8ca8-69b2634fd64d/067e71c5-5948-487c-8ca8-69b2634fd64d2.gif)
![实验1交叉编译工具链建立实验_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/067e71c5-5948-487c-8ca8-69b2634fd64d/067e71c5-5948-487c-8ca8-69b2634fd64d3.gif)
![实验1交叉编译工具链建立实验_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/067e71c5-5948-487c-8ca8-69b2634fd64d/067e71c5-5948-487c-8ca8-69b2634fd64d4.gif)
![实验1交叉编译工具链建立实验_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/067e71c5-5948-487c-8ca8-69b2634fd64d/067e71c5-5948-487c-8ca8-69b2634fd64d5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验1 交叉编译工具链建立实验1.1实验目的 熟悉Linux操作系统; 掌握交叉编译工具链的建立过程; 掌握通过gdb调试程序的方法; 掌握makefile文件的写法。1.2实验设备 硬件:PC机; 软件:Windows操作系统、VMware虚拟机和Linux操作系统,或直接安装于硬盘的Linux操作系统,arm-linux-gcc安装文件。1.3实验内容 安装Linux操作系统; 建立交叉编译工具链; 编写解决八皇后问题的程序。1.4实验原理1.4.1交叉编译工具链的简介交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程式,例如我们试验中在Linux平台上编译出能运
2、行在ARM为内核的CPU平台上的程式,编译得到的可执行文件是不能在Linux环境下运行的,必须放到ARM平台上才能运行。这种方法在异平台移植和嵌入式研发时非常有用的。 交叉编译工具链是由编译器、连接器和解释器组成的综合研发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小libc库大小的考虑,也能用别的C库来代替glibc,例如uClibc、dietlibc和newlib。1.4.2交叉编译工具链部分组件的介绍 GCC属于GUN工具链中的编译开发工具,它可以把源程序编译为可执行文件。GCC是支持支持 Ada 语言、C+ 语言、Java 语言、Objecti
3、ve C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等的编译器。GCC是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。GCC主要包括: cpp:GNU C编译器的预处理器 gcc:符合ISO标准的C编译器 g+:基本符合ISO标准的C+编译器 gcj:GCC的java前端 gnat:GCC的GNU ADA 95的前端 binutils是一组二进制工具程序集合,是辅助GCC的主要软件,其中主要包括: as:GNU汇编器 ld:GNU链接器 ar:创建归档文件,向库中添加/提取obj文
4、件 nm:列出obj文件中的符号 objcopy:复制和转化obj文件 objdump:显示对象文件的信息 ranlib:根据归档文件中的内容建立索引 readelf:显示elf格式执行文件中的各种信息 size:显示object文件和执行文件各段的总大小 strings:显示文件中可以打印的字符 strip:去掉执行文件中多余的信息(如调试信息) gprof:用来显示图表档案数据。1.4.3Linux常用开发工具的介绍和使用上面我们对交叉编译工具链做了概述,下面我们再给出linux下常用开发工具的介绍和使用。1.vi(vim) vi是linux下一种功能强大的,快速命令驱动的全屏幕编辑器,可
5、以类比DOS的edit。vi有三种操作模式:一是命令模式(或称指令模式),在此模式下的按键当作指令来处理;一种是输入模式(或称插入模式),此模式的按键作为真正的输入;另外一种是底行模式,在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编译环境,如寻找字符串、列出行号等。初始启动vi时处于命令模式。表1.1中列出了vi(vim)常用的命令。命 令介 绍光标移动类命令移动输入光标h将光标向左移动一列j将光标向下移动一行k将光标向上移动一行l将光标向右移动一列0将光标移动到当前行首$将光标移动到当前行尾Ctrl+F向前移动一页Ctrl+B向后移动一页w将光标移动到下一个单词
6、的首字母e将光标移动到下一个单词的末字母b将光标移动到前一个单词的首字母退出类命令退出VIM编辑器:q!不保存文件强制退出:w!文件存盘:wq!文件存盘后退出:x文件存盘后退出编辑类命令编辑文本常用命令i从光标前开始插入文本a从光标后开始插入文本r修改光标所在处的字符x删除光标处的一个字符dd删除光标所在的整行内容:5d删除第五行o在光标所在行下增加一行并进入输入模式u撤销最后一个更改操作yy复制当前行p粘贴当前行rm替换当前字符为m,替换后仍处于命令模式下表1.1 vi(vim)常用命令 vi的命令有很多,我们需要经常使用来熟悉这些命令,当你得心应手的时候你会发现vi相比其他文本编辑器有很多
7、优点,是一个非常高效的文本编辑器。2.arm-linux-gcc我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为arm-linux-gcc。下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家。首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段: (1) 预处理(Pre-Processing) (2) 编译(Compiling) (3) 汇编(Assembling) (4) 链接(Linking) Linux程序员可以根据自己的需要让 GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通
8、过加入不同数量和种类的调试代码来为今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。下面以文件example.c文件为例来说明它的命令用法:(1) arm-linux-gcc-o example example.c不加-c、-S、-E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。-o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出a.out。(2) arm-linux-gcc-c -o example.o example.c-c参数将对源程序example.c进行预处理、编
9、译、汇编操作,生成example.0文件。去掉指定输出选项“-o example.o”自动输出为example.o,所以在这里-o加不加都可以。(3) arm-linux-gcc-S -o example.s example.c-S参数将对源程序example.c进行预处理、编译,生成example.s文件。-o选项同上。(4) arm-linux-gcc-E -o example.i example.c-E参数将对源程序example.c进行预处理,生成example.i文件(不同版本不一样,有的将预处理后的内容打印到屏幕上),就是将#include,#define等进行文件插入及宏扩展等操
10、作。(5) arm-linux-gcc-v -o example example.c加上-v参数,显示编译时的详细信息,编译器的版本,编译过程等。(6) arm-linux-gcc-g -o example example.c-g选项,加入GDB能够使用的调试信息,使用GDB调试时比较方便。(7) arm-linux-gcc-Wall -o example example.c-Wall选项打开了所有需要注意的警告信息,像在声明之前就使用的函数,声明后却没有使用的变量等。(8) arm-linux-gcc-Ox -o example example.c-Ox使用优化选项,X的值为空、0、1、2、
11、3,0为不优化,优化的目的是减少代码空间和提高执行效率等,但相应的编译过程时间将较长并占用较大的内存空间。(9) arm-linux-gcc -I /home/include -o example example.c-Idirname: 将dirname所指出的目录加入到程序头文件目录列表中。如果在预设系统及当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。(10) arm-linux-gcc -L /home/lib -o example example.c-Ldirname:将dirname所指出的目录加入到库文件的目录列表中。在默认状态下,连接程序ld在系统的预设路径中
12、(如/usr/lib)寻找所需要的库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。(11) arm-linux-gcc static -o libexample.a example.c静态链接库文件3.gdbgdb是GNU发布的linux下的字符界面调试工具,它的功能非常强大,其中主要有: 按用户的要求启动程序 让被调试的程序在任意断点处停止(断点可以是条件表达式) 程序暂停时可检查运行环境 程序暂停时可动态改变运行环境 要使用gdb调试程序,在用gcc编译源文件时要指定-g选项,以使程序中包含必要的信息。 gcc g program.c /使用gdb的
13、前提 gdb program (gdb)file p /启动gdb (gdb)help command /查看命令gdb中程序的暂停方式(或称停止点)有以下几种: 断点(breakpoint) 观察点(breakpoint) 捕捉点(catchpoint) 信号(signals) 线程停止(thread stops) 可以用c命令恢复程序的运行。其中用break命令设置断点,有以下几种方法: break function /执行到某函数终止 break linenum /执行到某行终止 break+offset /在当前行后offset行停止 break-offset /在当前行前offset
14、行停止 break filename:linenum /执行到指定文件中的某行终止 break filename:function /执行到指定文件中的某函数终止 break *address /执行到某地址处终止 tbreak /仅中断一次,中断后断点自动删除 break.if condition /条件断点 例如:设置条件断点:break 18 if i=50,用condition命令可以修改条件(condition bnum expression);清除停止条件可以用condition bnum;ignore命令可以指定程序运行时忽略条件几次(ignore bnum count);使用i
15、nfo命令可以查看断点。表1. 2给出了gdb一些常用的命令:基本gdb命令命令描述file装入想要调试的可执行文件kill终止正在调试的程序list或l列出产生可执行文件的源代码的一部分next或n执行一行源代码但不进入函数内部step或s执行一行源代码而且进入函数内部run或r执行当前被调试的程序quit或q退出gdbwatch监视一个变量的值而不管它何时被改变break或b在代码里设置断点make使不退出gdb就可以重新产生可执行文件shell使不必离开gdb就能执行shell命令。表1.2 gdb常用命令总之,gdb的功能非常的强大,可以根据我们的需求启动,停止程序4.geditged
16、it是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。gedit是一个自由软件。是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。5.tartar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大
17、堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。语法:tar 主选项+辅选项 文件/目录。使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。命 令介 绍主选项c创建新的档案文件r把要存档的文件追加到档案文件的未尾t列出档案文件的内容u更新文件x从档案文件中释放文件退出类命令退出VIM编辑器b该选项是为磁带机设定的f使用档案文件或设备,这个选项通常是必选的k保存已经存在的文件m在还原文件时,把所有文件的修改时间设定为现在M创建多卷的档案文件,以便在几个磁盘中存放v详
18、细报告tar处理的文件信息w每一步都要求确认z用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩表1.3 tar常用命令6. makefileMakefile文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的Makefile。编译整个工程你所要做的唯一的一件事就是在shell
19、 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。make是一个命令工具,它解释Makefile中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。1.5实验步骤1.5.1 交叉编译工具链的建立Linux系统中的一些操作需要获得root权限才能进行
20、,通过su root命令,输入密码获得root权限即可进行相关操作,如图1.1。图1.1 root权限获得1.建立工作目录在Ubuntu操作系统的/tmp/test目录下建立test1目录以作为放置arm-linux交叉编译工具的位置。将arm-linux交叉编译工具源码包arm-linux-gcc-4.4.3.tgz,通过虚拟机共享文件夹/mnt/hgfs/share拷贝到此目录下,具体操作如下:#mkdir /tmp/test/test1#cp /mnt/hgfs/share/arm-linux-gcc-4.4.3.tgz /tmp/test/test1如图1.2所示:图1.2 arm-l
21、inux-gcc安装所用文件2.解压缩包使用tar命令对arm-linux交叉编译工具源码包进行解压,如图1.3所示:图1.3 解压3.系统配置解压结束后,需要对系统进行简单配置。使用vi或者gedit编辑root用户的配置文件.bashrc,该文件是一个隐藏文件。在该文件最后一行添加上arm-linux交叉编译工具的存放路径,然后保存退出,添加的内容为:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.3.2/bin,该路径应根据解压的4.4.3文件所在路径决定,不同的解压方法可能解压的路径各不相同,需要注意。如图1.2所示。图1.4 交叉编译工
22、具存放路径保存退出后,使用source命令,使修改生效,再运行arm-linux-gcc v命令,此时有arm-linux-gcc版本和配置信息输出即说明交叉工具链安装完成。如图1.3所示:图1.5 版本信息1.5.2 编写hello文件进行交叉编译编写hello.c文件代码如下图所示:图1.6 hello.c文件代码请自行将hello world改为每组两位同学的姓名与学号,并拍照,将图片嵌入实验报告中。保存退出。使用arm-linux交叉编译工具对写好的hello.c程序进行交叉编译,生成可执行文件hello,在hello.c文件目录下执行代码为:arm-linux-gcc o hello
23、 hello.c。在当前目录下生成可执行文件hello,如图1.5所示。图1.7 编译hello.c1.5.3 编写8皇后问题程序1. 题目说明八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在88格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法,并输出这些摆法的棋谱,放置皇后的位置输出,其他位置输出*。为解决这个问题,把棋盘的横坐标定为i,纵坐标定为j, i和j的取值范围是从到。当某个皇后占了位置(i, j)时,在这个位置的垂直方向、水平方向和斜线方向都不能再放其它皇后了。
24、首先,可以定义四Queen88、a8、b15和c15分别用来存放棋盘,棋盘的列状态,棋盘的主对角线状态和棋盘的从对角线状态。其中:aj-1=1 第j列上无皇后aj-1=0 第j列上有皇后bi+j-2=1 (i, j)的对角线(右上至左下)无皇后bi+j-2=0 (i, j)的对角线(右上至左下)有皇后ci-j+7=1 (i, j)的对角线(左上至右下)无皇后ci-j+7=0 (i, j)的对角线(左上至右下)有皇后 为第i个皇后选择位置的算法伪码如下:for(j=1;j=8;j+) /*第i个皇后在第j行*/if (i,j)位置为空)) /*即相应的三个数组的对应元素值为1*/占用位置(i,j
25、) /*置相应的三个数组对应的元素值为0*/if i8为i+1个皇后选择合适的位置; else 输出一个解在终端下,运行自己的程序,显示如下的结果: 省略 *53* 省略 最后一行,应输出每组两位同学的姓名与学号,并拍照,将图片嵌入实验报告中。请大家按照以上说明编写相应源程序,并编译执行。2. 利用make来管理工程关于make的原理和使用方法,已经在前面的实验原理部分介绍了,接下来,给出一个本节实验的Makefile。请同学自行分析下面的Makefile并逐行注释:# Makefile for eightqueen# make DEBUG 构造调试版本# make 构造优化版本# make
26、clean 清除构造生成的文件CC = gccAS = asEXEC = eightqueenOBJS = eightQueen.cMACRO =ifdef DEBUGASFLAGS = elseCFLAGS = -O2 endifINCLUDES = CRYPT = LIBDIR = all:compilecompile: eightQueen.c$(CC) -o eightqueen $(OBJS)debug: eightQueen.c$(CC) -g -o eightqueen $(OBJS)clean:rm ./ eightqueen#End Makefile3. 程序调试调试程序是编
27、程过程中重要的一个步骤。Linux下使用gdb来调试程序,注意,在调试之前,需要重新编译一遍程序,把调试选项打开,执行命令如下:gcc -g -o eightqueen eightQueen.c gdb eightqueen 屏幕回显示如下信息:GNU gdb (Ubuntu 7.8-1ubuntu4) 7.8.0.20141001-cvsCopyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代办公室空间的灵活性与可变性设计
- 现代物流人才培养与教育创新
- 学校记者团国庆节活动方案
- 现代企业的办公自动化与多维度管理培训体系构建研究
- 现代企业家的自我管理与时间管理策略
- 现代汽车制造工艺的变革与教育新模式
- 现代企业决策中的核心能力体现
- 国庆节主题活动方案早教
- 2023三年级数学下册 四 绿色生态园-解决问题第3课时说课稿 青岛版六三制001
- 2024-2025学年高中历史 专题八 当今世界经济的全球化趋势 二 当今世界经济的全球化趋势(3)教学说课稿 人民版必修2
- 无人机技术与遥感
- 燃煤电厂超低排放烟气治理工程技术规范(HJ 2053-2018)
- 临床叙事护理概述与应用
- TSG-T7001-2023电梯监督检验和定期检验规则宣贯解读
- 冠脉介入进修汇报
- 护理病例讨论制度课件
- 养阴清肺膏的临床应用研究
- 恩施自治州建始东升煤矿有限责任公司东升煤矿矿产资源开发利用与生态复绿方案
- PDCA提高卧床患者踝泵运动的执行率
- 蒋诗萌小品《谁杀死了周日》台词完整版
- DBJ-T 15-98-2019 建筑施工承插型套扣式钢管脚手架安全技术规程
评论
0/150
提交评论