2025-11-08 06:35:30
在keil里定义bool类型变量时出现multiply defined错误,就是说同一个变量名被多次定义了。比如在两个不同文件里都写了extern bool led_status;或者直接写了两次bool led_status,keil链接器发现符号重复就会报错。这就像在同一个房间挂了两张写着"张三"的名牌一样,系统不知道该认哪个。
为什么会出现这种情况呢?因为keil在链接阶段会检查所有符号的唯一性。当你在多个源文件或头文件里用相同符号名定义全局变量时,链接器会认为这些符号被重复定义。比如假设你写了三个文件:main.c里定义bool flag=1,include.h里用extern bool flag,test.c里又写了extern bool flag。这时候keil会提示multiply defined,因为三个文件都提供了flag的符号定义。根据keil的文档(参考《ARM Keil MDK用户手册》第5.3节),每个全局符号在程序中只能出现一次。解决方法要么改用不同符号名,要么确保符号只在单个文件中定义。比如改成main.c里的flag1,include.h里的flag2,test.c里的flag3。这样keil就能正确识别每个符号的来源了。
本题链接: