Arduino,C,Linker错误,ESP32目标

时间:2017-01-29 10:28:09

标签: arduino linker linker-errors esp32

我使用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插件时,它也会这样做,但会显示详细的输出,表明它已经构建了源,但是在将它们全部链接在一起后失败了。 ..

问题出在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的调用,它将再次构建。

我会感激任何帮助

1 个答案:

答案 0 :(得分:0)

我发现缺少了

#ifdef __cplusplus
extern "C" {
#endif

// code...

#ifdef __cplusplus
}
#endif

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