【问题标题】:Arduino, C, Linker error, ESP32 targetArduino,C,链接器错误,ESP32 目标
【发布时间】:2017-01-29 10:28:09
【问题描述】:

我使用 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 的调用,它将重新构建。

我会很感激任何帮助

【问题讨论】:

标签: arduino linker linker-errors esp32


【解决方案1】:

发现不见了

#ifdef __cplusplus
extern "C" {
#endif

// code...

#ifdef __cplusplus
}
#endif

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 2021-12-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多