为什么不同的编译器(Keil/IAR/GCC)启动文件不一样?
2026/7/23 12:56:44 网站建设 项目流程

难度:★★
本文首发于我的嵌入式技术公众号「OneChan」,未经授权禁止转载。


如果你同时用过 Keil、IAR 和 GCC 开发 Cortex-M3,一定被一件事折磨过:

同一个芯片,三个编译器的启动文件长得完全不一样。

Keil 的是startup_stm32f10x_md.s,里面一堆AREAEXPORTDCD
IAR 的是startup_stm32f10x_md.s,里面全是SECTIONPUBLICDC32
GCC 的启动文件叫startup_stm32f10x_md.S(注意大写 S),写的是.section.global.word

你试图把 Keil 的启动文件复制到 GCC 工程里,编译器直接报几十个错,根本认不出那些伪指令。

明明是同一个芯片,干的也是同一件事(设置栈、建向量表、调 main),为什么启动文件不能统一?

答案藏在三个字里:ABI 差异

今天我们把这个问题拆开,看看不同编译器的启动文件到底差在哪,为什么差,以及——如果你被迫换编译器,应该怎么改。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询