Imported Arduino IDE project does not build

I have a sketch that is a simple example of using the ESP32TimerInterrupt library. The sketch was downloaded from the library’s GitHub repository. I have opened the sketch in the Arduino IDE and after adding the ESP32TimerInterrupt library, it builds and runs.

However, when I import that sketch into VSCode/PlatformIO, add the library, the build fails with some undefined symbols.

I am at a loss as to why this does not work, any pointers on how to resolve it would be much appreciated,
Sid

Please post the exact platformio.ini and the link to the example you’re compiling.

Thank you:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = khoih-prog/ESP32TimerInterrupt@^2.0.1
build_type = debug

And the example project → https://github.com/khoih-prog/ESP32TimerInterrupt/blob/master/examples/Change_Interval/Change_Interval.ino
Sid

I’ve noticed that programs from this author often need lib_ldf_mode = chain+ or (deep+). Can you add that in the platformio.ini and retry?

@maxgerhardt Thank you I tried both of the following, the errors did not change each time.

lib_ldf_mode = deep+

and

lib_ldf_mode = chain+

Sid

The project does build with the latest 2.0.2 core.

>pio run
Processing esp32dev (platform: https://github.com/Jason2866/platform-espressif32.git; board: esp32dev; framework: arduino)
------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
FILESYSTEM  spiffs
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 (2.0.3+sha.35ffd4c) > 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)
PACKAGES:
 - framework-arduinoespressif32 2.0.3
 - tool-esptoolpy 1.30201.220126 (3.2.1)
 - tool-mklittlefs 1.203.210628 (2.3)
 - tool-mkspiffs 2.230.0 (2.30)
 - toolchain-xtensa-esp32 8.4.0+2021r2-patch2
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 32 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <ESP32TimerInterrupt> 2.0.1
Building in release mode
Compiling .pio\build\esp32dev\src\main.cpp.o
Generating partitions .pio\build\esp32dev\partitions.bin
Archiving .pio\build\esp32dev\libFrameworkArduinoVariant.a
Indexing .pio\build\esp32dev\libFrameworkArduinoVariant.a
Compiling .pio\build\esp32dev\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\USB.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32dev\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32dev\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32dev\libFrameworkArduino.a
Indexing .pio\build\esp32dev\libFrameworkArduino.a
Linking .pio\build\esp32dev\firmware.elf
Retrieving maximum program size .pio\build\esp32dev\firmware.elf
Checking size .pio\build\esp32dev\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   4.3% (used 14060 bytes from 327680 bytes)
Flash: [=         ]  10.6% (used 139109 bytes from 1310720 bytes)
Building .pio\build\esp32dev\firmware.bin
esptool.py v3.2.1
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
============================================= [SUCCESS] Took 13.47 seconds =============================================

please use the platformio.ini

[env:esp32dev]
platform = https://github.com/Jason2866/platform-espressif32.git
board = esp32dev
framework = arduino
lib_deps = khoih-prog/ESP32TimerInterrupt@^2.0.1

and use the CLI to execute a

pio platform update https://github.com/Jason2866/platform-espressif32.git

to update a potentially outdated platform version.

Thank you very much, great progress. I now get only a final link error:

c:/users/sidpr/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: reopening c:/users/sidpr/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/no-rtti/crti.o: No such file or directory

c:/users/sidpr/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: final link 
failed: No such file or directory
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32dev\firmware.elf] Error 1

Hm, looks your either antivirus software interfererd here or your toolchain got corrupted.

If you build it twice, does it link?

If not, remove the folder c:/users/sidpr/.platformio/packages/toolchain-xtensa-esp32/ and build again.

Wonderful! A second build did the trick, I can can build, flash, and debug (using ESP-Prog.

One concern is about using a fork of the Espressif platform. Is that an OK thing to do as this project moves forwards and perhaps Espressif makes updates?

Well using the custom platform is currently the only way to get the 2.0.2 core that is capable of compiling libraries depending on this core version. But you can have more safety against changes by fixing the commit hash of the used platform in place, so it should always build.

platform = https://github.com/Jason2866/platform-espressif32.git#52fb773

Once PlatformIO devs release a new version of the regular espressif32 platform with 2.0.2 core support, it should however be used instead.

OK, many thanks for your help. Very much appreciated.