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

STM32CubeIDE开发stm32f746g-disco DCMI项目报多重定义错误如何解决

你遇到的是典型的链接阶段多重定义错误,错误原因是Font24、Font24_Table两个全局符号在多个编译目标文件中被重复定义,按照以下优先级排查即可解决:

  • 第一步:确认头文件声明格式正确
    全局变量的声明必须加extern关键字,且只能放在头文件中,变量的具体定义必须放在.c文件中。
    以你的字体文件为例,font24.h的正确写法如下:
// 必须加头文件防护,防止重复引入
#ifndef __FONT24_H
#define __FONT24_H

#include <stdint.h>
// 假设sFONT是你的字体结构体定义
typedef struct {
    const uint8_t *table;
    uint16_t width;
    uint16_t height;
} sFONT;

// 仅做声明,加extern关键字
extern const uint8_t Font24_Table[];
extern sFONT Font24;

#endif

font24.c中只保留变量的定义,不要加extern:

#include "font24.h"

// 具体定义,直接写变量内容
const uint8_t Font24_Table[] = {
    // 你的字模数据
};

sFONT Font24 = {
    .table = Font24_Table,
    .width = 24,
    .height = 24
};
  • 第二步:检查是否有误引入.c文件的问题
    查看main.c的头部引入部分,确认只有#include "font24.h",没有#include "font24.c"这类错误写法。如果直接引入.c文件,相当于把font24.c的全部内容复制到main.c中编译,会导致main.o和font24.o同时存在这两个符号的定义。

  • 第三步:清理项目缓存重新编译
    STM32CubeIDE经常会出现缓存未清理的问题,直接点击顶部菜单栏Project -> Clean选中对应项目清理,或者手动删除项目目录下的Debug文件夹后重新构建项目,即可清除旧的缓存目标文件。

  • 第四步:检查源文件编译列表
    右键项目选择Properties -> C/C++ General -> Paths and Symbols -> Source Location,确认font24.c在编译列表中仅出现一次,没有重复添加的情况。

内容的提问来源于stack exchange,提问作者beyonson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:27:04