Undefined reference to `ledcWrite'

Hello,
can someone help me with this linker error? Unfortunately I have no idea whats going wrong. Here is a demo program and the output for the build.
Thanks
JHom

#include <Arduino.h>
void setup()
{
  pinMode(16, OUTPUT);
  ledcSetup(1, 256, 8);
  ledcAttachPin(16, 1);
}

void loop()
{
  ledcWrite(1,255);
  delay(1000);
  ledcWrite(1,0);
  delay(1000);
}
[env:esp_wroom_02]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
Processing esp_wroom_02 (platform: espressif32; board: esp32dev; framework: arduino)
--------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz 320KB RAM (4MB Flash)
DEBUG: CURRENT(esp-prog) EXTERNAL(esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 27 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <WebServer> 1.0
|   |-- <FS> 1.0
|   |-- <WiFi> 1.0
|-- <WiFi> 1.0
|-- <ESPmDNS> 1.0
|   |-- <WiFi> 1.0
Compiling .pioenvs\esp_wroom_02\src\main.cpp.o
Generating partitions .pioenvs\esp_wroom_02\partitions.bin
Compiling .pioenvs\esp_wroom_02\lib4bf\FS\FS.cpp.o
Compiling .pioenvs\esp_wroom_02\lib4bf\FS\vfs_api.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\ETH.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFi.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiAP.cpp.o
Archiving .pioenvs\esp_wroom_02\lib4bf\libFS.a
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiClient.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiGeneric.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiMulti.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiSTA.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiScan.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiServer.cpp.o
Compiling .pioenvs\esp_wroom_02\lib79a\WiFi\WiFiUdp.cpp.o
Compiling .pioenvs\esp_wroom_02\lib315\WebServer\Parsing.cpp.o
Compiling .pioenvs\esp_wroom_02\lib315\WebServer\WebServer.cpp.o
Compiling .pioenvs\esp_wroom_02\lib315\WebServer\detail\mimetable.cpp.o
Compiling .pioenvs\esp_wroom_02\libd5d\ESPmDNS\ESPmDNS.cpp.o
Archiving .pioenvs\esp_wroom_02\lib79a\libWiFi.a
Archiving .pioenvs\esp_wroom_02\libFrameworkArduinoVariant.a
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\Esp.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\FunctionalInterrupt.cpp.o
Archiving .pioenvs\esp_wroom_02\libd5d\libESPmDNS.a
Archiving .pioenvs\esp_wroom_02\lib315\libWebServer.a
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\IPAddress.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\IPv6Address.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\MD5Builder.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\Print.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\Stream.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\StreamString.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\WMath.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\WString.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\base64.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\cbuf.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-ledc.c.o
C:\Users\josef\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-i2c.c: In function 'i2cProcQueue':
C:\Users\josef\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-i2c.c:1282:18: warning: unused variable 'tAfter' [-Wunused-variable]
portTickType tAfter=xTaskGetTickCount();
^
C:\Users\josef\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-i2c.c:1274:18: warning: unused variable 'tBefore' [-Wunused-variable]
portTickType tBefore=xTaskGetTickCount();
^
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-time.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\libb64\cdecode.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\libb64\cencode.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\main.cpp.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\stdlib_noniso.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\wiring_pulse.c.o
Compiling .pioenvs\esp_wroom_02\FrameworkArduino\wiring_shift.c.o
Archiving .pioenvs\esp_wroom_02\libFrameworkArduino.a
Linking .pioenvs\esp_wroom_02\firmware.elf
.pioenvs\esp_wroom_02\src\main.cpp.o:(.literal._Z15handleRgbforLedv+0x18):
undefined reference to `ledcWrite'
.pioenvs\esp_wroom_02\src\main.cpp.o: In function `handleRgbforLed()':
main.cpp:(.text._Z15handleRgbforLedv+0x73): undefined reference to `ledcWrite'
collect2.exe: error: ld returned 1 exit status
*** [.pioenvs\esp_wroom_02\firmware.elf] Error 1
======================= [ERROR] Took 16.71 seconds =======================

Not reproducable for me.

DATA:    [          ]   4.1% (used 13476 bytes from 327680 bytes)
PROGRAM: [==        ]  15.3% (used 200524 bytes from 1310720 bytes)

This is where the unfound function is stored. Is the file C:\Users\<user>\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-ledc.c empty?

What is your pio --version and pio platform show espressif32 output?

Hello,
Thank you for your help. Unfortunately the file is not empty.
The PlatformIO version is 3.6.7,
the Espressif32 output is

espressif32 ~ Espressif 32
==========================
Espressif Systems is a privately held fabless semiconductor company. They provide wireless communications and Wi-Fi chips which are widely used in mobile devices and the Internet of Things applications.

Version: 1.8.0
Home: http://platformio.org/platforms/espressif32
Repository: https://github.com/platformio/platform-espressif32.git
Vendor: https://espressif.com/
License: Apache-2.0
Frameworks: arduino, espidf, pumbaa, simba

Packages
--------

Package toolchain-xtensa32
--------------------------
Type: toolchain
Requirements: ~2.50200.0
Installed: Yes
Version: 2.50200.80
Original version: 5.2.0
Description: GCC for SoC Xtensa L108

Package tool-openocd-esp32
--------------------------
Type: debugger
Requirements: ~1.1000.20181026
Installed: No (optional)

Package framework-simba
-----------------------
Type: framework
Requirements: >=12.2.0
Installed: No (optional)

Package tool-mkspiffs
---------------------
Type: uploader
Requirements: ~2.230.0
Installed: Yes
Version: 2.230.0
Original version: 2.30
Description: Tool to build and unpack SPIFFS images

Package framework-arduinoespressif32
------------------------------------
Type: framework
Requirements: ~2.10002.190416
Installed: Yes
Version: 2.10002.190416
Original version: 1.0.2
Description: Arduino Wiring-based Framework (ESP32 Core)

Package framework-pumbaa
------------------------
Type: framework
Requirements: >=2.3.0
Installed: No (optional)

Package tool-espotapy
---------------------
Type: uploader
Requirements: ~1.1.0
Installed: Yes
Version: 1.1.3
Original version: None
Description: This script will push an OTA update to the ESP

Package framework-espidf
------------------------
Type: framework
Requirements: ~3.30200.190418
Installed: Yes
Version: 3.30200.190418
Original version: 3.2.0
Description: Espressif IoT Development Framework with the ESP32

Package tool-esptoolpy
----------------------
Type: uploader
Requirements: ~1.20600.0
Installed: Yes
Version: 1.20600.0
Original version: 2.6.0
Description: ESP8266 and ESP32 serial bootloader utility

Boards
------
ID                    MCU            Frequency  Flash   RAM    Name
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
esp32-evb             ESP32          240MHz    4MB     320KB  OLIMEX ESP32-EVB
ttgo-lora32-v1        ESP32          240MHz    4MB     320KB  TTGO LoRa32-OLED V1
esp32thing            ESP32          240MHz    4MB     320KB  SparkFun ESP32 Thing
m5stack-core-esp32    ESP32          240MHz    4MB     320KB  M5Stack Core ESP32
iotbusio              ESP32          240MHz    4MB     320KB  oddWires IoT-Bus Io
nano32                ESP32          240MHz    4MB     320KB  MakerAsia Nano32
pocket_32             ESP32          240MHz    4MB     320KB  Dongsen Tech Pocket 32
heltec_wireless_stick ESP32          240MHz    8MB     320KB  Heltec Wireless Stick
iotbusproteus         ESP32          240MHz    4MB     320KB  oddWires IoT-Bus Proteus
espectro32            ESP32          240MHz    4MB     320KB  ESPectro32
nina_w10              ESP32          240MHz    2MB     320KB  u-blox NINA-W10 series
quantum               ESP32          240MHz    16MB    320KB  Noduino Quantum
node32s               ESP32          240MHz    4MB     320KB  Node32s
heltec_wifi_kit_32    ESP32          240MHz    4MB     320KB  Heltec WiFi Kit 32
esp32-pro             ESP32          240MHz    4MB     320KB  OLIMEX ESP32-PRO
bpi-bit               ESP32          160MHz    4MB     320KB  BPI-Bit
heltec_wifi_lora_32_V2 ESP32          240MHz    8MB     320KB  Heltec WiFi LoRa 32 (V2)
esp32cam              ESP32          240MHz    4MB     320KB  AI Thinker ESP32-CAM
lolin32               ESP32          240MHz    4MB     320KB  WEMOS LOLIN32
onehorse32dev         ESP32          240MHz    4MB     320KB  Onehorse ESP32 Dev Module
fm-devkit             ESP32          240MHz    4MB     320KB  ESP32 FM DevKit
frogboard             ESP32          240MHz    4MB     320KB  Frog Board ESP32
wesp32                ESP32          240MHz    4MB     320KB  Silicognition wESP32
lopy                  ESP32          240MHz    4MB     320KB  Pycom LoPy
nodemcu-32s           ESP32          240MHz    4MB     320KB  NodeMCU-32S
esp32-poe             ESP32          240MHz    4MB     320KB  OLIMEX ESP32-PoE
m5stick-c             ESP32          240MHz    4MB     320KB  M5Stick-C
esp-wrover-kit        ESP32          240MHz    4MB     320KB  Espressif ESP-WROVER-KIT
esp32-gateway         ESP32          240MHz    4MB     320KB  OLIMEX ESP32-GATEWAY
hornbill32minima      ESP32          240MHz    4MB     320KB  Hornbill ESP32 Minima
odroid_esp32          ESP32          240MHz    16MB    320KB  ODROID-GO
oroca_edubot          ESP32          240MHz    4MB     320KB  OROCA EduBot
esp320                ESP32          240MHz    4MB     320KB  Electronic SweetPeas ESP320
esp32doit-devkit-v1   ESP32          240MHz    4MB     320KB  DOIT ESP32 DEVKIT V1
heltec_wifi_lora_32   ESP32          240MHz    4MB     320KB  Heltec WiFi LoRa 32
intorobot             ESP32          240MHz    4MB     320KB  IntoRobot Fig
wemosbat              ESP32          240MHz    4MB     320KB  WeMos WiFi and Bluetooth Battery
m5stack-fire          ESP32          240MHz    16MB    6.25MB M5Stack FIRE
lolin_d32             ESP32          240MHz    4MB     320KB  WEMOS LOLIN D32
espea32               ESP32          240MHz    4MB     320KB  April Brother ESPea32
hornbill32dev         ESP32          240MHz    4MB     320KB  Hornbill ESP32 Dev
esp32dev              ESP32          240MHz    4MB     320KB  Espressif ESP32 Dev Module
lopy4                 ESP32          240MHz    4MB     1.25MB Pycom LoPy4
widora-air            ESP32          240MHz    16MB    320KB  Widora AIR
esp32vn-iot-uno       ESP32          240MHz    4MB     320KB  ESP32vn IoT Uno
xinabox_cw02          ESP32          240MHz    4MB     320KB  XinaBox CW02
d-duino-32            ESP32          240MHz    4MB     320KB  D-duino-32
alksesp32             ESP32          240MHz    4MB     320KB  ALKS ESP32
mhetesp32devkit       ESP32          240MHz    4MB     320KB  MH ET LIVE ESP32DevKIT
lolin_d32_pro         ESP32          240MHz    4MB     320KB  WEMOS LOLIN D32 PRO
ttgo-t-beam           ESP32          240MHz    4MB     1.25MB TTGO T-Beam
turta_iot_node        ESP32          240MHz    4MB     320KB  Turta IoT Node
pico32                ESP32          240MHz    4MB     320KB  ESP32 Pico Kit
sparkfun_lora_gateway_1-channel ESP32          240MHz    4MB     320KB  SparkFun LoRa Gateway 1-Channel
microduino-core-esp32 ESP32          240MHz    4MB     320KB  Microduino Core ESP32
featheresp32          ESP32          240MHz    4MB     320KB  Adafruit ESP32 Feather
firebeetle32          ESP32          240MHz    4MB     320KB  FireBeetle-ESP32
mhetesp32minikit      ESP32          240MHz    4MB     320KB  MH ET LIVE ESP32MiniKit
espino32              ESP32          240MHz    4MB     320KB  ESPino32

So the first thing I notice is that the error message is different from the code you show, there’s not handleRgbforLed() there. Does the problem also occurr on the minimal code example posted above?

As the next countermeasure I’d advice to delete C:\Users\<user>\.platformio\packages\framework-arduinoespressif32 so that it downloads a fresh copy. Also PIO could be upgraded to the latest dev version (pio upgrade --dev)

2 Likes

Hello,
it’s working again. The reinstallation of …/framework-arduinoespressif32 has helped.
Many thanks for the quick help.
JMan

1 Like

I’m having a similar problem with heltec_wireless_stick.

collect2.exe: error: ld returned 1 exit status *** [.pio\build\heltec_wireless_stick\firmware.elf] Error 1

Any help would be appreciated.

~Bob

Full error message please? This just says “Oopsie, Linking failed.”

Processing heltec_wireless_stick (platform: espressif32; board: heltec_wireless_stick; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/heltec_wireless_stick.html
PLATFORM: Espressif 32 1.11.1 > Heltec Wireless Stick
HARDWARE: ESP32 240MHz, 320KB RAM, 8MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES: toolchain-xtensa32 2.50200.80 (5.2.0), framework-arduinoespressif32 2.10004.191002 (1.0.4), tool-esptoolpy 1.20600.0 (2.6.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 40 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <src>
|   |-- <SPI> 1.0
|-- <SPI> 1.0
Building in release mode
Compiling .pio\build\heltec_wireless_stick\src\main.cpp.o
Generating partitions .pio\build\heltec_wireless_stick\partitions.bin
Compiling .pio\build\heltec_wireless_stick\lib3f5\SPI\SPI.cpp.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\LoRa.cpp.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\LoRaMac.c.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\LoRaMacCrypto.c.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\Mcu.S.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\OLEDDisplay.cpp.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\OLEDDisplayUi.cpp.o
Archiving .pio\build\heltec_wireless_stick\lib3f5\libSPI.a
Compiling .pio\build\heltec_wireless_stick\lib065\src\aes.c.o
In file included from lib\src\board.h:35:0,
                 from lib\src\LoRaMac.c:21:
lib\src\sx1276.h:469:13: warning: 'RxChainCalibration' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
Compiling .pio\build\heltec_wireless_stick\lib065\src\board.c.o
In file included from lib\src/board.h:35:0,
                 from src\main.cpp:31:
lib\src/sx1276.h:469:13: warning: 'void RxChainCalibration()' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
In file included from lib\src\board.h:35:0,
                 from lib\src\board.c:15:
lib\src\sx1276.h:469:13: warning: 'RxChainCalibration' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
lib\src\board.c:232:13: warning: 'BoardUnusedIoInit' defined but not used [-Wunused-function]
 static void BoardUnusedIoInit( void )
             ^
lib\src\board.c:240:6: warning: 'SystemClockConfig' defined but not used [-Wunused-function]
 void SystemClockConfig( void )
Compiling .pio\build\heltec_wireless_stick\lib065\src\cmac.c.o
      ^
lib\src\board.c:245:6: warning: 'CalibrateSystemWakeupTime' defined but not used [-Wunused-function]
 void CalibrateSystemWakeupTime( void )
      ^
Compiling .pio\build\heltec_wireless_stick\lib065\src\delay.c.o
In file included from lib\src/board.h:35:0,
                 from lib\src/LoRa.h:6,
                 from lib\src\LoRa.cpp:1:
lib\src/sx1276.h:469:13: warning: 'void RxChainCalibration()' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
Compiling .pio\build\heltec_wireless_stick\lib065\src\dht11.cpp.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\fifo.c.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\rtc-board.S.o
In file included from lib\src\board.h:35:0,
                 from lib\src\delay.c:15:
lib\src\sx1276.h:469:13: warning: 'RxChainCalibration' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
Compiling .pio\build\heltec_wireless_stick\lib065\src\sx1276-board.c.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\sx1276.c.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\timer.S.o
Compiling .pio\build\heltec_wireless_stick\lib065\src\utilities.c.o
Archiving .pio\build\heltec_wireless_stick\libFrameworkArduinoVariant.a
In file included from lib\src\board.h:35:0,
                 from lib\src\sx1276-board.c:15:
lib\src\sx1276.h:469:13: warning: 'RxChainCalibration' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
In file included from lib\src\board.h:35:0,
                 from lib\src\utilities.c:17:
lib\src\sx1276.h:469:13: warning: 'RxChainCalibration' declared 'static' but never defined [-Wunused-function]
 static void RxChainCalibration( void );
             ^
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\Print.cpp.o
Archiving .pio\build\heltec_wireless_stick\lib065\libsrc.a
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\WString.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\base64.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\main.cpp.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\heltec_wireless_stick\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\heltec_wireless_stick\libFrameworkArduino.a
Linking .pio\build\heltec_wireless_stick\firmware.elf
.pio\build\heltec_wireless_stick\lib065\libsrc.a(rtc-board.S.o): In function `TimerGetTimerValue':
D:\61722\Documents\Arduino\hardware\heltec\esp32\libraries\ESP32_LoRaWAN\src/rtc-board.c:120:(.text.TimerGetTimerValue+0x31): dangerous relocation: call8: call target out of range: __udivdi3
.pio\build\heltec_wireless_stick\lib065\libsrc.a(rtc-board.S.o): In function `TimerGetElapsedAlarmTime':
D:\61722\Documents\Arduino\hardware\heltec\esp32\libraries\ESP32_LoRaWAN\src/rtc-board.c:120:(.text.TimerGetElapsedAlarmTime+0x32): dangerous relocation: call8: call target out of range: __udivdi3
.pio\build\heltec_wireless_stick\lib065\libsrc.a(rtc-board.S.o): In function `TimerComputeElapsedTime':
D:\61722\Documents\Arduino\hardware\heltec\esp32\libraries\ESP32_LoRaWAN\src/rtc-board.c:134:(.text.TimerComputeElapsedTime+0x32): dangerous relocation: call8: call target out of range: __udivdi3
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\heltec_wireless_stick\firmware.elf] Error 1
====================================================================================== [FAILED] Took 11.10 seconds ======================================================================================
The terminal process terminated with exit code: 1

Terminal will be reused by tasks, press any key to close it.

This has nothing to do with this topic of "undefined reference to ledcWrite, well. According to https://www.esp32.com/viewtopic.php?t=1612 you must use -mlongcalls` to fix the actual error

So I’d suggest adding

build_flags = -mlongcalls

It might be that that doesn’t effect the library code you’re using (which you have placed into lib/src) so you need a library.json with the same build flag. (Redirecting...)

1 Like

I added the

build_flags = -mlongcalls

And I still have the same error and I removed the libaries that I had in lib/src ?

So is this a library issue or an IDE, as I’m able to build and upload with Arduino without any errors?

You’re right the error also references this the ESP32_LoRaWAN library. I’d suggest you remove references to your Arduino library folder (you put this somewhere in the platformio.ini right?), clone the source library into lib/ (must be in its separate folder, I think you’re having the wrong folder structure currently where you put the library source files directly into lib/. For structure see here). Once cloned into lib, a library.json should be added which has the -mlongcalls build flag, as described in the docs above.

A different link order causes the libm.a (math library) to be placed at some other place in Arduino IDE compared to PlatformIO, where the library code is close enough to the calling code. In this case PIO seems to have an order which places the lib too far away, thus we would need a long call, which is only done when the above flag is activated.

As an alternative, you can play around with the link order programmed in

for the -lm flag. (or maybe in -lgcc? not sure)

This file is locally in <home folder>/.platformio/packages/framework-arduinoespressif32/tools.

I don’t have any references in my ini?

[env:heltec_wireless_stick]
platform = espressif32
board = heltec_wireless_stick
framework = arduino


monitor_speed = 115200

build_flags = -mlongcalls


indent preformatted text by 4 spaces

How is it able to reference this path then? oO Where is the project located?

In my projects dir? Under test?
C:\Users\veitchb\Documents\PlatformIO\Projects\

Isn’t that (odd path) because it’s static library (or is that precompiled… whatever… I’m sure you get the point!)?

.pio\build\heltec_wireless_stick\lib065\libsrc.a(rtc-board.S.o): In function `TimerGetTimerValue':
D:\61722\Documents\Arduino\hardware\heltec\esp32\libraries\ESP32_LoRaWAN\src/rtc-board.c:120:(.text.TimerGetTimerValue+0x31): dangerous relocation: call8: call target out of range: __udivdi3