news 2026/4/3 22:52:41

预处理到可执行文件:一文说清编译各阶段任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
预处理到可执行文件:一文说清编译各阶段任务

以下是对您提供的技术博文《预处理到可执行文件:编译全流程深度技术解析》的全面润色与重构版本。本次优化严格遵循您的全部要求:

✅ 彻底去除AI痕迹,语言自然、专业、有“人味”——像一位在嵌入式一线摸爬滚打十年的老工程师,在茶水间边泡茶边给你讲清楚整个编译链;
✅ 打破刻板模块化结构,取消所有“引言/概述/总结/展望”等套路标题,代之以逻辑递进、层层深入、有呼吸感的技术叙事流
✅ 将“预处理→编译→汇编→链接”四阶段,转化为一条真实工程问题驱动的主线:从一个MCU固件烧不进去的报错开始,倒推回每一环可能埋下的雷;
✅ 关键概念不堆术语,而是用类比+实操+陷阱复现的方式讲透(例如:“宏不是函数,它是剪刀手”、“.o文件就像没拼好的乐高,每块都标了编号但还没对齐位置”);
✅ 所有命令、参数、代码片段均保留并增强上下文解释,附带真实调试场景中的使用心得(比如-dM不是为了炫技,而是你在交叉编译RISC-V时发现__riscv没定义,必须靠它定位头文件污染源);
✅ 删除所有空泛结语,结尾落在一个具体、可延展、有张力的技术动作上——不是“未来可期”,而是“你现在就可以打开终端试一句”。


为什么我的固件烧不进STM32?——从一个undefined reference to 'printf'说起

上周五下午三点,你对着J-Link烧录器发呆。firmware.bin生成成功,但OpenOCD提示:Failed to halt target;换个角度想,也许根本不是调试器的问题——你把firmware.elf拖进readelf -a一看,赫然发现:

Symbol table '.symtab' contains 127 entries: 56: 00000000 0 NOTYPE GLOBAL DEFAULT UND printf

UND?未定义?可你明明写了#include <stdio.h>,也加了-lc链接选项……
别急着重装工具链。这个问题,大概率不是链接器坏了,而是你从未真正看清过自己写的那行printf("hello"),是怎么从键盘敲下,变成Flash里一串字节的

我们来走一遍这条路径。不是教科书式的“四阶段流程”,而是一次带着问题、踩着坑、亲手拆解的逆向溯源


第一站:预处理——你以为你写的是C,其实CPP只当它是纯文本

先别碰gcc -c。回到源头,执行这句:

arm-none-eabi-gcc -E -dM -I./inc app.c > app.i

注意两个关键点:
--E:停在预处理后,不往后走;
--dM:强制输出所有宏定义,包括GCC内置的__ARM_ARCH_7M____GNUC__,还有你自己在config.h里写的#define ENABLE_LOG 1

打开app.i,你会震惊:
- 原本300行的app.c,变成了12,487行
- 所有#include "driver_uart.h"都被展开成几千行寄存器定义;
- 每个LOG_INFO("cnt=%d", cnt),都已变成do { if(ENABLE_LOG) printf("[INFO] cnt=%d\n", cnt); } while(0); <

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 3:34:43

全文检索响应加速指南:es数据库配置调优

以下是对您提供的博文《全文检索响应加速指南:Elasticsearch 数据库配置调优深度解析》的 全面润色与专业升级版 。本次优化严格遵循您的核心要求: ✅ 彻底去除AI腔与模板化表达 (如“本文将从…几个方面阐述”、“综上所述”等) ✅ 打破章节割裂感,以真实工程脉络…

作者头像 李华
网站建设 2026/4/1 20:35:15

8051 PWM波形生成:Keil C51从零实现教程

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体风格已全面转向 真实工程师视角的实战笔记体 ,摒弃模板化表达、学术腔与AI痕迹,强化逻辑连贯性、教学节奏感与工程现场感。全文无“引言/概述/总结”等程式化标题,所有知识点自然嵌套于问题驱动的叙…

作者头像 李华
网站建设 2026/4/2 13:01:23

零基础也能用!YOLOv9官方版镜像快速部署实战指南

零基础也能用&#xff01;YOLOv9官方版镜像快速部署实战指南 你是不是也经历过这样的场景&#xff1a;刚下载完YOLOv9代码&#xff0c;还没开始跑模型&#xff0c;就卡在了CUDA版本不匹配、PyTorch装不上、OpenCV报错、环境依赖冲突……一上午过去&#xff0c;连第一张检测图都…

作者头像 李华
网站建设 2026/4/1 11:09:25

对防火墙进行认证配置

目前有一防火墙连接着外网环境&#xff0c;企业内部网络以及服务器网络&#xff0c;先对其进行相关认证配置以及安全策略的配置&#xff0c;网络拓扑图如下所示。一、基础配置1、对交换机SW2和防火墙的接口以及基本设备的IP进行配置设备接口VLAN接口类型SW2GE0/0/2VLAN 10Acces…

作者头像 李华
网站建设 2026/4/2 15:38:28

YOLOv9单卡训练优化案例:batch size调参实测效果

YOLOv9单卡训练优化案例&#xff1a;batch size调参实测效果 在实际部署YOLOv9模型时&#xff0c;很多开发者会遇到一个现实问题&#xff1a;显存有限&#xff0c;但又希望训练效率尽可能高。特别是使用单张消费级显卡&#xff08;如RTX 3090/4090&#xff09;时&#xff0c;b…

作者头像 李华
网站建设 2026/3/31 18:59:19

动手试了Qwen3-1.7B,边缘设备跑大模型真香了

动手试了Qwen3-1.7B&#xff0c;边缘设备跑大模型真香了 1. 开场&#xff1a;树莓派上跑出“思考过程”的那一刻&#xff0c;我信了轻量化大模型 你有没有试过在树莓派5上&#xff0c;让一个大模型一边推理一边告诉你它怎么想的&#xff1f;不是云端调用&#xff0c;不是模拟…

作者头像 李华