GCC/G++详解

GCC/G++

编译

  1. C语言源文件可以使用gcc和g++编译(优先选择gcc)

    • gcc test.c -o mybin / gcc -o mybin test.c
      基于test.c文件生成可执行程序mybin
    • g++ tes.c -o mybin / g++ -o mybin test.c
      基于test.c文件生成可执行程序mybin
  2. C++源文件只能使用g++进行编译

    • g++ code.cpp -o mybin / g++ -o mybin code.cpp
      基于code.cpp文件生成可执行文件mybin

gcc是如何完成的

预处理

预处理的主要作用是进行宏替换
  • 预处理功能主要包括头文件展开、宏定义、条件包含、条件编译、去除注释等
  • 预处理的指令是以#开头的代码行

头文件展开
头文件展开是指,在预处理的时候,将头文件里面的内容拷贝到源文件中。

条件编译
通过给编译一起传递不同的宏值,来进行对代码的动态裁剪。

编译

编译的主要作用是生成汇编文件
  • 在这个阶段中,gcc首先检查代码的规范性、是否存在语法错误等,以确定代码的实际要做的工作,在检查无误之后,gcc把代码翻译为汇编语言

汇编

生成机器可识别代码
  • 汇编阶段是把编译阶段生成的.s文件转成目标文件

链接

生成可执行文件或者库文件
将代码与库文件进行链接形成可执行文件

编译流程

预处理 -> 编译 -> 汇编 -> 链接

  1. 预处理
    • gcc -E code.c -o code.i
      • 执行指令,从现在开始进行程序的翻译过程,当预处理完成之后停下来,预处理之后生成的信息存入到临时文件code.i文件中
      • 选项-E,这个选项的作用是让gcc在预处理结束后停止编译过程
      • 选项-o,是指目标文件
      • .i文件为已经经过预处理的c原始程序
  2. 编译
    • gcc -S code.i -o code.s
      • 执行指令,从现在开始进行程序的翻译过程,当编译工作完成之后停下来,生成的信息写入到临时文件code.s中
      • 选项-S,该选项只进行编译但不进行汇编,生成汇编代码
  3. 汇编
    • gcc -c code.s -o code.o
      • 执行指令,从现在开始进行程序的翻译过程,当汇编工作完成之后停下来,生成的信息写入到临时文件code.o中
      • 选项-c,可以看到已经转换为.o的二进制目标代码
  4. 链接
    • gcc -o mybin code.o
      执行指令,生成可执行文件mybin
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

排骨炖粉条

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

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

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

打赏作者

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

抵扣说明:

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

余额充值