Arduino,C,链接器错误,ESP32目标
我使用Arduino IDE为ESP8266和ESP32开发代码(事实上这并不重要,只是工具链不同于Atmel AVRs的经典Arduino) 我有一个代码可以工作,没有生成错误或警告。该项目包括OneWire、DS18B20等的自定义.c/.h文件 好的。然后,我添加了新的自定义.c/.h源,将其包含在main.ino中,但得到一个链接器错误: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
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