You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:32:33