ESP-IDF编译ESP32程序时出现‘Multiple definition of’错误求助
ESP32编译多重定义错误解决方案
错误原因
你在test.h中直接定义了全局变量someData,当main.c和test.c都包含该头文件时,两个源文件会各自生成一个someData的实例,链接器合并目标文件时就会触发"multiple definition"错误。另外注意代码里存在笔误:结构体成员定义为float x,但实际使用的是ax,这也会导致编译错误,需要一并修正。
修复方法
将变量的声明放在头文件,定义放在源文件中,确保全局变量只有一个实例:
1. 修改test.h文件
将变量定义改为extern声明,仅告知编译器变量的类型和名称,不分配内存,同时修正结构体成员名:
#ifndef _TEST_H_ #define _TEST_H_ struct SomeData { float ax; }; extern struct SomeData sensorData; // 声明全局变量 void something(void); #endif
2. 修改test.c文件
在源文件中定义全局变量,分配内存:
#include "test.h" // 定义全局变量,仅在此文件中分配内存 struct SomeData sensorData; void something(void){ sensorData.ax = 35; }
3. main.c文件无需修改
保持原代码即可,头文件中的extern声明已让编译器知晓sensorData的存在。
验证修改
重新编译项目,多重定义错误和成员不存在的错误都会消失,程序可正常运行。
内容的提问来源于stack exchange,提问作者Aung Cho Oo
相关产品推荐
相关产品推荐

