gcc/arm-linux-gcc 浅析

本文详细解析了GCC的编译过程,包括预处理、编译、汇编和连接四个阶段,并介绍了gcc、arm-linux-gcc的常用选项,如-c、-S、-E、-o等,以及如何查看警告、生成调试信息和优化代码。同时,讨论了ld链接器和arm-linux-objdump反汇编工具的使用,帮助理解编译过程中各个环节的作用。
摘要由CSDN通过智能技术生成
  1. 编译过程的理解
    • 预处理:针对预处理命令,例如#include,#define,#ifdef…#ednif。将相应的预处理命令执行,例如#include的包含,#define的替换等,将.c/.cpp文件转化为.i文件,生成的.i文件会比.c/.cpp文件大的多,主要是因为包含进大量的.h文件。
    • 编译:预处理之后的.i文件将用来做具体的编译,将.i文件转化为汇编.s文件。对于.s文件,我们可以通过汇编的语法了解程序内部的具体流程。特别的,由于.s文件相对于.i文件抛弃了大量的无用内容,所以.s文件会比.i文件小的多。同时。由于汇编语言相对于c/c++较为繁琐,所以.s文件会比.c/.cpp大一些。
    • 汇编:上一步生成的.s文件将会用来汇编成机器代码.o文件,同时也是可执行文件。自然,机器代码要比汇编语言更繁琐一些,相应的.o文件会比.s文件大一些。
    • 连接:在写程序的时候不可避免的会用到一些库文件,或是本身的源文件就由多个源文件组成,也就是说,汇编的过程将程序的各个有机部分编译成功,最后一步自然要将各个部分的.o文件结合库文件连接到一起,生成最终的可执行.o文件。
  2. gcc/cc/arm-linux-gcc的常用选项
    • -c: 编译不连接, .c/.cpp->.o
    • -S: 不汇编, .c/.cpp->.s
    • -E: 不编译, .c/.cpp->.i
    • -o file: 生成名为file的文件
    • -v: 显示配置命令
    • -Wall: 查看所有警告,特别是直接编译不会显示的一些警告
    • -g: 调试专用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值