Arduino、C、链接器错误、ESP32 目标
Arduino, C, Linker error, ESP32 target
我使用 Arduino IDE 为 ESP8266 和 ESP32 开发代码(实际上这无关紧要,只是工具链与 Atmel AVR 的经典 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()'
所有内容都包含在内,不过我可以浏览符号。当我使用 VisualStudio 的 VisualMicro 插件时,它也一样,但显示详细的输出表明它已构建源,但在 Linking 后失败一切都在一起...
问题出在dsp.h/dsp.c
简化来源:
my_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
typedef struct
{
//some variables here...
}EQSTATE;
void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq);
dsp.c
#include "dsp.h"
void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq)
{
//some simple code
}
在输出中它甚至说 my_esp32.ino:384: undefined reference to init_3band_state(EQSTATE*, int, int, int)
但在 384 号线上
根本不是与此 dsp 相关的代码..
如果我注释掉对 init_3band_state 的调用,它将再次构建。
我将不胜感激任何帮助
我发现少了
#ifdef __cplusplus
extern "C" {
#endif
// code...
#ifdef __cplusplus
}
#endif
在我的 .h 源代码中,也许有一天它会对遇到类似问题的人有所帮助。
我使用 Arduino IDE 为 ESP8266 和 ESP32 开发代码(实际上这无关紧要,只是工具链与 Atmel AVR 的经典 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()'
所有内容都包含在内,不过我可以浏览符号。当我使用 VisualStudio 的 VisualMicro 插件时,它也一样,但显示详细的输出表明它已构建源,但在 Linking 后失败一切都在一起...
问题出在dsp.h/dsp.c
简化来源:
my_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
typedef struct
{
//some variables here...
}EQSTATE;
void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq);
dsp.c
#include "dsp.h"
void init_3band_state(EQSTATE* es, int lowfreq, int highfreq, int mixfreq)
{
//some simple code
}
在输出中它甚至说 my_esp32.ino:384: undefined reference to init_3band_state(EQSTATE*, int, int, int)
但在 384 号线上
根本不是与此 dsp 相关的代码..
如果我注释掉对 init_3band_state 的调用,它将再次构建。
我将不胜感激任何帮助
我发现少了
#ifdef __cplusplus
extern "C" {
#endif
// code...
#ifdef __cplusplus
}
#endif
在我的 .h 源代码中,也许有一天它会对遇到类似问题的人有所帮助。