为什么全局符号要 EXPORT,外部符号要 IMPORT? 难度:★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。任何一个启动文件,翻开前几行,你一定会看到这样的组合:EXPORT __Vectors EXPORT Reset_Handler IMPORT SystemInit IMPORT __mainEXPORT和IMPORT成对出现,一个往外送,一个往里拿。很多教程一句话带过:“EXPORT是导出符号给别的文件用,IMPORT是引用别的文件的符号。”这话没错,但太浅了。你有没有想过:为什么需要显式声明?编译器不能自动识别吗?如果忘了写 EXPORT,链接器报什么错?如果忘了写 IMPORT 呢?这两个关键字背后,链接器到底在做什么?今天我们就来把“符号可见性”这件事彻底拆开。这不仅是启动文件的问题,你以后遇到的每一个“undefined reference”链接错误,根源都在这。一、汇编器和编译器都是“近视眼”先理解一个根本前提:汇编器和编译器在编译单个文件