尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

001

001
📅 发布时间:2026/6/20 18:25:05
001

001.在hello world中编译器工具链分别做了什么

为便于理解底层原理,本文中所有操作均在cmd中使用gcc实现

一、预处理器(gcc -E -o a.i a.c)

预处理的分类(以#开头)

  1. 包含头文件
    #include

  2. 宏定义(替换)
    'define 宏名 宏体'

    'define ABC 10'(将ABC替换为10)

    想要得到一个仅被预处理的文件,我们可以在文件所在目录下打开命令行,输入'gcc -E -o a.i a.c'。
    这里的-E是指仅进行预处理操作,-o指将a.c的操作结果写入a.i,可知预编译文件后缀为i

  3. 条件编译

    #ifdef DEBUGprintf("hello world!\n");
    #endif
    

    根据是否定义DEBUG,我们可以决定是否编译printf,尽管我们可以在预处理的部分直接定义DEBUG,但这样会更改他人的代码,

    这是不合适的。

    我们可以在cmd中手动打开:gcc -DDEBUG -o build a.c (build为exe文件)

二、编译器(gcc -S -o a.s a.i) 汇编器(gcc -c -o a.o a.s)

gcc是十分智能的,我们这里对整个编译过程进行分解,但如果我们输入gcc -c -o a.o a.c,gcc会自动帮我们完成预处理和编译工作。

这里我们主要理解产生可执行文件的过程:

人 --- 编译 --- 汇编语言

汇编语言 --- 汇编 --- 机器指令集

机器指令集 --- 链接 确定数据的地址 --- 可执行文件

下面我们来看链接器

三、链接器 (gcc -o build.exe a.o)

链接器主要用于确定数据的地址,链接过程常见的错误就是一些需要使用的数据我们并没有定义,或者一些调用的函数我们没有去定义,链接器就会报错。

相关新闻

  • 使用 Rust 进行验证码识别
  • US$11.9 CAN Filter 18 in 1 for Benz/BMW Universal CAN Filter
  • 2025防腐木厂家权威推荐榜:实力品牌与定制服务深度解析

最新新闻

  • LPC213x I2C驱动开发:寄存器解析、状态机实战与调试指南
  • 智己LS6和问界M7怎么选?2026款值得买的深度对比与理性选购建议 - 外贸老黄
  • Agent 越能干,你越不敢放手?ANOLISA给它穿上全套防护
  • OpenWRT终极指南:iStore软件中心3大核心问题完整解决方案
  • 有向空间网络模型与兴趣聚类系数研究
  • ksnip终极指南:5分钟掌握这款强大的跨平台截图工具

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号