Arduino,C,链接器错误,ESP32目标

Arduino,C,链接器错误,ESP32目标,arduino,linker,linker-errors,esp32,Arduino,Linker,Linker Errors,Esp32,我使用Arduino IDE为ESP8266和ESP32开发代码(事实上这并不重要,只是工具链不同于Atmel AVRs的经典Arduino) 我有一个代码可以工作,没有生成错误或警告。该项目包括OneWire、DS18B20等的自定义.c/.h文件 好的。然后,我添加了新的自定义.c/.h源,将其包含在main.ino中,但得到一个链接器错误: sketch\my_esp32.ino.cpp.o:(.literal._Z14Equalizer_Initv+0x18): undefined re

我使用Arduino IDE为ESP8266和ESP32开发代码(事实上这并不重要,只是工具链不同于Atmel AVRs的经典Arduino)

我有一个代码可以工作,没有生成错误或警告。该项目包括OneWire、DS18B20等的自定义.c/.h文件

好的。然后,我添加了新的自定义.c/.h源,将其包含在main.ino中,但得到一个链接器错误:

sketch\my_esp32.ino.cpp.o:(.literal._Z14Equalizer_Initv+0x18): undefined reference to `init_3band_state(EQSTATE*, int, int, int)'
sketch\my_esp32.ino.cpp.o: In function `Equalizer_Init()'
所有东西都包括在内,我可以浏览符号。。当我将VisualMicro插件用于VisualStudio时,它也会这样做,但会显示详细的输出,表明它已经构建了源代码,但在将所有源代码链接到一起后失败…

问题出在dsp.h/dsp.c中

简化资料来源:

我的esp32.ino

#include "dsp.h"

EQSTATE *equalizer;

void Equalizer_Init()
{
    init_3band_state(equalizer, 800, 5000, 50000);
}

void setup()
{
    Equalizer_Init();
}

void loop()
{

}
dsp.h

dsp.c

在输出中,它甚至说
my_esp32.ino:384:init_3band_状态的未定义引用(EQSTATE*,int,int,int)
但是在384线上 与此dsp完全不相关的代码。。 如果我注释掉对init_3band_state的调用,它将再次构建


如果有人帮我,我将不胜感激

#ifdef __cplusplus
extern "C" {
#endif

// code...

#ifdef __cplusplus
}
#endif

在我的.h源代码中,也许有一天它会帮助有类似问题的人。

Arduino不是C!你可能有一个C++名字的问题。可能的副本
#include "dsp.h"

void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq)
{
    //some simple code
}
#ifdef __cplusplus
extern "C" {
#endif

// code...

#ifdef __cplusplus
}
#endif