完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
学习一下Linux环境编程,小结一下。一、GCC 图4-1:文件后缀 用GCC 生成可执行文件
图4-2:gcc编译过程 预处理: C编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等 编译: 将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件 汇编: 将汇编代码翻译成了机器码,但是还不可以运行 链接: 处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息,通常是虚拟地址 在gcc命令加上-E参数,可以得到预处理文件
在gcc编译参数加上-S,可以将hello.i编译成hello.s文件。命令如下
得到了汇编文件后,通过gcc就可以得到机器码了。在终端输入下列命令,可以得到hello.o文件
尽管已经得到了机器码,但还是不可以运行的,必须要经过链接才能运行。在终端输入下列命令,将会得到可执行文件a.out。
二、Makefile Make工具是20世纪70年代发明的用于编程项目编译的辅助工具。make的编译思路很简单,如果源程序发生了改变,并需要重新构建程序或者其它输出文件时,make先查看时间戳哪些改变了,并按照要求重新构建这些文件,而不浪费时间重新构建其它文件。 GNU make是make工具的GNU版本,已经成为了工业标准,它属于自由软件,目前非常流行。 在终端输入make命令就会调用make工具,make会在当前目录按照文件名顺序寻找Makefile文件,依次按照:GNUmakefile、makefile、Makefile。如果找到其中的任何一个,就读取并按照其中的规则执行,否则报错. 新建一个 Makefile 文件如下:
编辑内容如下: all: (TAB) gcc hello.c 在程序中输入make,便可以生成a.out可执行文件。 Makefile的基本语法格式是: target: prerequisites command target是编译目标,在编译的时候输入“make target”就可以执行target的规则。target既可以是目标文件,也可以是可执行文件,还可以使一个标签,如前面的all。 prerequisites是依赖关系文件,即生产target所需要的文件或者目标。 command是生成target所需执行的命令。 介绍Make的时候提到过,make会根据时间戳来决定哪些文件需要重新编译。对照这个规则来解释就是:如果prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。 再回头看hello.c的Makefile文件内容: all: (TAB)gcc hello.c 整个Makefile只定义了一个目标all,没有依赖关系,all目标对应的命令为gcc hello.c。 这里的目标all是一个标签,也是第一个目标,将第一个目标设置为all这是一个习惯,也可以改为任何一个标签。终端输入make,不指定任何编译目标,默认执行第一个标签的规则,也就是说输入make和make all实际上是等同的。 图4-3:make的自动变量 图4-4:make预定义变量 图4-5:make常用参数 三、GDB GDB(the GNU Project Debugger)是GNU发布的一个功能强大的UNIX程序调试工具,可以调试Ada、C、C++、Objective-C和Pascal等多种语言的程序,可以在大多数UNIX和Microsoft Windows变种上运行。GDB既可以在本地调试,也可以进行远程调试。 GDB可以在命令行下启动,通过命令行对程序进行调试;GDB也有自己的图形前端,如DDD。无论通过何种方式启动GDB,通过GDB能够对程序进行如下调试: 运行程序,还可以给程序加上某些参数,指定程序的行为。 使程序在特定的条件下停止。 检查程序停止时的运行状态。 改变程序的参数,以纠正程序中的错误。 需要使用GDB调试的程序,在编译的时候必须加-g参数,开启调试信息。运行GDB调试程序通常使用如下方式: $ gdb <程序名称> 在GDB的命令提示符,输入help,能够得到GDB命令的分类,主要有: aliases 命令别名 breakpoints 断点设置 data 数据查看 files 指定和检查文件 internals 维护命令 running 运行程序 stack 检查堆栈 status 状态查看 tracepoints 跟踪程序 图4-6:基本指令 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1932个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36421 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4867 浏览 1 评论
6108 浏览 1 评论
6818 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4249 浏览 0 评论
645浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
641浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
643浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
729浏览 2评论
844浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:07 , Processed in 1.281044 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号