《gcc/make/gdb编程与使用》

该实验报告详细介绍了如何在ARM平台上安装和使用gcc编译器,编写Makefile,以及使用gdb进行应用程序调试。实验内容包括arm-linux-gcc的安装,源码的编译与优化,动态库的创建,以及通过Makefile自动化构建过程。在实验中,还通过示例程序bubble.c和main.c展示了编译和调试的步骤,并提到了使用gdb发现并解决问题的过程。
摘要由CSDN通过智能技术生成

实验报告

实验1  gcc/make/gdb编程与使用

.实验目的

了解嵌入式开发工具套件组成,掌握开发工具安装,熟练运用gcc各命令选项,熟练编写Makefile和使用make工具,掌握gdb各命令用于应用程序调试。

.实验内容

实验2.1  arm-linux-gcc安装

实验2.2  编译工具gcc使用

实验2.3  编写Makefile和使用make编译

实验2.4  使用gdb调试应用程序

实验2.5  使用code::blocks进行图形化编程

.预备知识

Linux使用等

.实验设备及工具(包括软件调试工具)

硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。

软件: WinXP或UBUNTU开发环境。

.实验步骤

5.1 交叉编译工具配置及编译

步骤【参看04- Tiny6410 Linux开发指南.pdf文档1.3.5节】:

第一步,解压缩交叉编译器工具,命令为tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /

arm-linux-gcc可执行文件位于目录:/opt/FriendlyARM/toolschain/4.5.1

第二步,修改PATH环境变量,将arm-linux-gcc可执行文件目录添加到PATH环境变量中,命令为:

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

第三步,执行arm-linux-gcc –v可以看到交叉编译器版本为        4.5.1      

5.2  arm-linux-gcc编译工具使用

【参看相关视频文件及指导书】:

要求:要求编写冒泡排序程序bubble.c及其头文件bubble.h和主程序main.c,各文件主要内容如下:

main.c中定义数组并赋值(数组元素个数和赋值内容可以自己定义),调用bubble.c中冒泡排序函数bubble(int *p,int n)进行排序,调用输出打印函数print(int *p,int n)进行输出。

bubble.c定义bubble(int *p,int n)和print(int* p ,int n)函数,分别完成冒泡排序功能和数组输出功能。

bubble.h完成bubble.c中函数的声明。

   第一步,在/opt/exp_2文件夹下按照上述要求编写源码;

   第二步 编译

(1)编译源码文件为可执行文件bubble,命令为:gcc bubble.c main.c -o bubble

(2)假设在/opt/exp_2文件夹下新建子目录include,并将bubble.h移到该文件夹下,编译可执行文件bubble,命令为:gcc main.c bubble.c -I include/ -o bubble

(3)假如将bubble.c编译成动态库libbubble.so,具体命令为:arm-linux-gcc  –shared  -fpic  -o libbubble.so bubble.c –I./include

此时利用libbubble.so编译可执行文件bubble,具体命令为:gcc main.c -l bubble -L ./ -I ./include/ -o bubble 

思考:如果将bubble拷贝到开发板上,执行是否成功?怎样才能成功?

gcc 编译会失败;用 arm-linux-gcc 编译可以成功

(4)可执行程序bubble生成过程中,分别使用-O1/-O2/-O3进行编译,生成的可执行文件名分别为bublle1 、bubble2和bubble3,观察这几个文件的大小分别为  850485048504  字节。如果用-g命令选项生成可执行文件bubble4,则字节大小为  9456  字节。

       思考:为何这几个可执行文件大小有差异

实验代码本身很简单,所以-O1/-O2/-O3优化作用不大; -g编译器在编译的时候会产生调试信息

5.3 编写Makefile和使用make工具

       按照5.2要求,编写Makefile文件,要求能够完成源码文件编译和中间文件清除。

(1)Makefile如下

SRCS:=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,$(SRCS))
CC=gcc
bubble:$(OBJS)
       $(CC) -o $@  $(OBJS)
%.o:%.c
       $(CC) -g -c -o $@  $< -I./
clean:
       rm $(OBJS) bubble

(2)使用make工具编译生成可执行文件命令为          make -f Makefile          ;

(3)清除中间结果命令为              make clean                             

5.4  假设按照我们提供的实验源码bubble.c和main.c生成可执行文件,执行结果为:

          the sorted Array is 32767 1  2  3  5  10  32767                      

发现执行结果并不符合我们的预期,使用gdb进行调试,列出具体步骤如下:

gdb bubble;
list bubble
list
b main
Run
List
next
print a[0]
next
Print a[0]    
Print a[1]
Print a[3]
Print a[4]
Next
Quit
b print
b main
Run
Next
Step
Next
Next
quit

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任性不认命~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值