I have always been able to compile my Arduino framework esp32 program.
I made a truly trivial change to the code tonight and encountered a new linking error whereby libcoexist.a
has an undefined reference to btdm_rf_bb_reg_init
as follows:
Linking .pio\build\node32s-sprinkplug\firmware.elf
c:/users/myuser/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\myuser\.platformio\packages\framework-arduinoespressif32\tools\sdk\esp32\lib\libcoexist.a(coexist_hw.o):(.iram1.18+0x0): undefined reference to `btdm_rf_bb_reg_init'
c:/users/myuser/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\myuser\.platformio\packages\framework-arduinoespressif32\tools\sdk\esp32\lib\libcoexist.a(coexist_hw.o):(.iram1.18+0x16): undefined reference to `btdm_rf_bb_reg_init'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\node32s-sprinkplug\firmware.elf] Error 1
I believe that btdm_rf_bb_reg_init
has something to do with bluetooth but I am not using or referencing bluetooth in any way in my code (I use WiFi).
The only libraries I include are:
//Basic Arduino/esp32 Libraries
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <esp_wifi.h> //Needed to set MAC address
#include <EEPROM.h> //Needed to store variables permanently to EEPROM
#include <ArduinoOTA.h> //Needed for OTA updates
#include <time.h> // Needed to get date & time
//#include <ESP32Ping.h> //DEBUG
//Sensor libraries
#include "Adafruit_BME680.h"
#include "Adafruit_MCP9808.h"
//MQTT Libraries
#include <ArduinoJson.h>
#include "PubSubClient.h"
If I do a grep on the .build
directory for btdm_rf_bb_reg_init
, I get:
grep -r btdm_rf_bb_reg_init .
./.pio/build/node32s-sprinkplug/firmware.map:btdm_rf_bb_reg_init C:\Users\myuser\.platformio\packages\framework-arduinoespressif32\tools\sdk\esp32\lib\libcoexist.a(coexist_hw.o)
I tried wiping the build
and libdeps
subdirectory and compiling again, but I still got the error.
I ran pio update
and pio pkg update
so everything is up-to-date (I am using platformio/espressif32 @ 6.9.0). Compiling shows the follow package versions:
PACKAGES:
- framework-arduinoespressif32 @ 3.20017.0 (2.0.17)
- tool-esptoolpy @ 1.40501.0 (4.5.1)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 42 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Adafruit BME680 Library @ 2.0.5
|-- Adafruit MCP9808 Library @ 2.0.2
|-- PubSubClient @ 2.8.0
|-- ArduinoJson @ 7.2.0
|-- ArduinoOTA @ 2.0.0
|-- EEPROM @ 2.0.0
|-- WiFi @ 2.0.0
Note that reverting my trivial change didn’t eliminate the error so it seems like something has changed in espressif and/or Arduino libraries.
- Any idea what could have changed that would cause this compilation error?
- Any idea on how to fix this?