“嵌入式Linux操作系统实验(2022秋)”实验报告

交叉编译工具之Make工程管理器

第四次实验报告

实验名称 嵌入式开发常用工具
实验类型 验证性实验
时间 10.30

一. 实验目的

熟悉并掌握嵌入式开发常用工具的运用
  1. 目的1
    1:熟练掌握gcc工作原理和使用流程;
    2:熟练掌握gcc调试用工具的各项功能。
  2. 目的2
    1:熟练掌握gdb的工作原理和使用流程;
    2:数量掌握gdb调试用工具的各项功能;
    3:能应用gdb完成复杂程序的调试工作。
  3. 目的3
    1:了解make工程管理器的基本运行原理;
    2:了解Makefile 的基本概念和基本结构,初步掌握编写简单Makefile 的方法;
    3:了解递归Make 的编译过程,初步掌握利用GNU Make 编译应用程序的方法。

二. 实验内容

  1. 内容1
    1.在Code目录下新建hello.c文件,,内容为输出“Wellcom to hnit ! ”这段语句,并用gcc进行编译;
    2.对刚编写的代码通过gcc进行编译。
  2. 内容2
    编写一个test.c程序,完成两数相加的操作,相加操作由子函数完成,进行编译,并通过gdb进行调试.
  3. 内容3
    利用make工程管理器完成以下程序的调试,并修改其中错误,直到其运行出正确的结果。
    /*this is testgdb.c program ! */
    int cmper(int a, int b )
    {
     if( a> b)
       return "大于"
     else
     {
         if(a==b)
            return "相等";
         else
            return "小于";
     }
    }
    int main()
    {
     int x,y;
     printf("input two nums(eg:11 22):")
     scanf("%d,%d",%d,%d);
     printf("%d %d %d",a,cmper(a,b),a);
    }
    
    copy

三. 实验步骤

步骤1:用vi在/home/shiyanlou/Code/目录中新建hello.c文件
$ cd /home/shiyanlou/Code
$ touch hello.c
$ vi  hello.c
copy

在新文档中加入如下代码:

#include "stdio.h"
int main()
{
 printf("Wellcom to  hnit");
}
copy

输入完毕按“:wq”退出
对hello.c文件处理分为四个阶段:
阶段1:
利用下面的示例命令:

$ gcc -E hello.c -o hello.i
copy

观察生成的中间文件test.i和源文件的区别

$ cat hello.i
copy

阶段2:
这个阶段对应的GCC命令如下所示:

$ gcc -S hello.i -o hello.s
copy

观察生成的中间文件test.i和源文件的区别

$ cat hello.s
copy

阶段3:
程序汇编阶段阶
这个阶段对应的GCC命令如下所示:

$ gcc -c hello.s -o hello.o
copy

.o文件为二进制文件,如果试图用以下命令查看,屏幕将显示乱码。

$cat hello.o
copy

阶段4:
程链接阶段
这一步骤,用下面的示例命令完成:

$gcc hello.o -o hello
copy

2.重新新建test.c文件,内容如下,请用gcc调试参数进行测试。带警告选项,查看提示警告情况
用vi新建test.c文件并保存

/* this is test.c */
#include<stdio.h>
int main()
{
 int i;
 for(i = 0; i <= 3; i++)
   printf("hello gcc!\n");
 //return 0;
}
copy

可以用带-Wall选项进行调试,找出尽可能多的错误来。 如果不想看到警告信息,可以使用-w来禁止所有的警告。
实验效果截图如下:
图片描述图片描述步骤2:
在Code目录下新建testc.c编辑程序
用编辑器编输入以下程序

//this is test progam test.c
#include "stdio.h"
int add(int a ,int b)
{
  int c;
  c=a+b;
  return c;
}
int main()
{
  int x,y,z;
  printf("input x ,y (eg:3 4)");
  scanf("%d %d",&x,&y);
  z=add(x,y);
  printf("%d + %d = %d",x,y,z);
  return 0;
}
copy

对以上代码进行编译链接,生成可执行文件test

$ gcc -g test.c -o test
$ ls -l |grep test
copy

GDB 加载调试对象
进入 debugging 调试界面,载入调试程序,查看程序源码 用

$gdb  test
copy

实现

图片描述 实验成功

四. 实验总结

1.出现的错误: 使用此代码

$cat hello.o
copy

时 发生错误,屏幕显示乱码。用

$ gcc -c hello.s -o hello.o
copy

代码实现。因此要熟记各指令的使用以及用处。
2. 心得:通过此次学习,让我深入学习并了解的gcc工作原理和使用,学习了gdb调试用工具的使用以及深入应用。了解make工程管理器的基本运行原理,基本概念和基本结构。使用代码时应仔细思考用法以及作用,否则将发生错误。

最新评论
暂无评论~