2014025649《嵌入式程序设计》第2周学习总结

2014025649《嵌入式程序设计》第2周学习总结

教材学习内容总结

一. 常用编译命令选项

假设源程序文件名为test.c。

  1. 无选项编译链接
    用法:#gcc test.c
    作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

  2. 选项 -o
    用法:#gcc test.c -o test
    作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

  3. 选项 -E
    用法:#gcc -E test.c -o test.i
    作用:将test.c预处理输出test.i文件。

  4. 选项 -S
    用法:#gcc -S test.i
    作用:将预处理输出文件test.i汇编成test.s文件。

  5. 选项 -c
    用法:#gcc -c test.s
    作用:将汇编输出文件test.s编译输出test.o文件。

  6. 无选项链接
    用法:#gcc test.o -o test
    作用:将编译输出文件test.o链接成最终可执行文件test。

  7. 选项-O
    用法:#gcc -O1 test.c -o test
    作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

  1. 多个文件一起编译
    用法:#gcc testfun.c test.c -o test
    作用:将testfun.c和test.c分别编译后链接成test可执行文件。

  2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
    用法:
    gcc -c testfun.c //将testfun.c编译成testfun.o
    gcc -c test.c //将test.c编译成test.o
    gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:
LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令

1、使用gcc编译器编译C语言程序文件生成可执行文件的过程,是要经历四个相互关联的步骤:预处理、编译、汇编和链接。

2、gdb是GNU开源组织开发的一个强大的Linux下的程序调试工具,它主要完成:启动被调试程序,按照要求运行程序。让被调试的程序在指定的位置停住。当被调试程序停住时,可以检查被调试的状态和变量的值等内容。动态地改变被调试程序的运行环境等。

教材学习中的问题和解决过程

  1. 使用vi编辑hello.h、starfun.h、hello.c、star.c四个程序文件
    1150709-20170501174815007-1953423708.jpg
    1150709-20170501174345023-1533498816.jpg
    1150709-20170501174505914-1384127776.png
    1150709-20170501174558711-945650586.png
    1150709-20170501174614851-2124561868.png

  2. 使用gcc编译器,编译程序
    1150709-20170501174724351-1007751983.png
    1150709-20170501174839695-1320545553.jpg
    3.使用动态库
    1150709-20170501174954382-110756834.png

4.使用静态库
1150709-20170501175033929-661740953.png

  1. gdb调试器的使用
    运行成功:
    1150709-20170501175250242-1608816256.png
    下面在第5行加入断点,并运行程序,发现程序在第5行停止:
    1150709-20170501175349039-621651671.png
    在star2()函数中是for循环,可以使用n单步执行,且使用p打印出for中各个变量的值:
    1150709-20170501175357367-238273187.png
    如果想要退出循环,运行完整个程序,可以运行c,那么也可以设置多个断点,在第一个断点运行到第二个断点时,依然需要使用c命令:
    1150709-20170501175450664-161107986.png

Makefile编程实验

(1)用vi编辑hello.c
(2)用vi同一目录下编辑hello.h程序
(3)在shell命令行中用gcc尝试编译
(5)用vi在同一目录下编辑Makefile
(6)退出保存,在shell中键入:make,查看结果
(7)再次用vi打开Makefile,用变量进行替换
(8)退出保存,在shell中键入make,查看结果
(9)用vi在同一目录下编辑makefile1
(10)退出保存,在shell中键入:make -f makefile1,查看结果
(11)再次用vi编辑makefile1
(12)退出保存,在shell中键入:make -f makefile1,查看结果
1150709-20170501180324929-1792952259.png
1150709-20170501180330679-580037232.jpg
1150709-20170501180401726-735179731.png

其他

在本周的学习过程中我明白了很多关于gcc和gdb编程的知识点,在实验楼中也学习到了很多,通过vi编译makefile文件在通过gcc让我学到了很多,希望以后的学习更加顺利!

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标4500行30篇300小时
第一周200/2002/220/20学会Linux基本命令
第二周500/5004/440/40学会gcc和gdb编程
第三周/1000/7/60
第四周/1300/9/90

参考资料

  • 《嵌入式应用程序设计》学习指导

转载于:https://www.cnblogs.com/liming123456/p/6792209.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值