Include file errors in lib dependencies

I am using the Arduino framework for a project on PlatformIO.

I added a library to the platformio.ini config file to use in the project. This library (GitHub - adafruit/Adafruit_SPIFlash: Arduino library for external (Q)SPI flash device) is further dependent on another library (GitHub - adafruit/SdFat: Arduino Library for FAT12/FAT16/FAT32) to function. So I added both to the platformio.ini file.

Now the first library is accessing a class BaseBlockDriver from the second library. When I am building the program , the first library code is unable to access the class BaseBlockDriver from the second library. I get the following error :

.pio\libdeps\wiscore_rak4631\Adafruit SPIFlash\src/Adafruit_SPIFlash.h:49:49: error: expected class-name before ',' token

The following is the line mentioned in the error :

I verified it on Arduino IDE and the build is working fine there. Is this a PIO specific problem ? I have tried it on multiple workstations/ PCs and got the same error.

What’s your exact platformio.ini?

It’s the following :

; 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:wiscore_rak4631]
platform = nordicnrf52@9.3.0
board = wiscore_rak4631
framework = arduino
lib_deps = 
	beegee-tokyo/SX126x-Arduino@^1.3.2
	sparkfun/SparkFun LIS3DH Arduino Library@^1.0.3
	sparkfun/SparkFun u-blox GNSS Arduino Library@^2.0.15
	arduino-libraries/SD@^1.2.4
	https://github.com/adafruit/SdFat               ;contains BaseBlockDriver Class
	https://github.com/adafruit/Adafruit_NeoPixel
	https://github.com/adafruit/Adafruit_SPIFlash	;uses/imports BaseBlockDriver Class
build_flags = 
	-DREGION_US915
	-DRESET
extra_scripts = post:extra_script.py
monitor_speed = 115200
test_ignore = integration*

Actually I may have seen your type of error before in Failure building Adafruit Sensor Calibration Library - can't find Adafruit_SPIFlash.h - #2 by maxgerhardt.

Can you add

  -DEXTERNAL_FLASH_DEVICES=IS25LP080D

to the build_flags and retry?

Okay, I added the flag but still getting the same error.

Just to clarify , I am including this header from the adafruit library in the main program :

#include "Adafruit_SPIFlash.h"

Same problem after you open a CLI and execute pio upgrade (to update the PlatformIO core, not the platforms)?

It says that I’m already using the latest

Can you create a new project with

[env:wiscore_rak4631]
platform = nordicnrf52@9.3.0
board = wiscore_rak4631
framework = arduino
lib_deps =
	https://github.com/adafruit/Adafruit_SPIFlash	;uses/imports BaseBlockDriver Class

and source

#include <Arduino.h>
#include "Adafruit_SPIFlash.h"

void setup() {}
void loop() {}

?

Because it compiles for me with 0 problems.

Processing wiscore_rak4631 (platform: nordicnrf52@9.3.0; board: wiscore_rak4631; framework: arduino)
------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/nordicnrf52/wiscore_rak4631.html
PLATFORM: Nordic nRF52 (9.3.0) > WisCore RAK4631 Board
HARDWARE: NRF52840 64MHz, 243KB RAM, 796KB Flash
DEBUG: Current (jlink) External (jlink, stlink)
PACKAGES:
 - framework-arduinoadafruitnrf52 @ 1.10300.0 (1.3.0)
 - framework-cmsis @ 2.50700.210515 (5.7.0)
 - tool-adafruit-nrfutil @ 1.503.0 (5.3)
 - tool-sreccat @ 1.164.0 (1.64)
 - toolchain-gccarmnoneeabi @ 1.70201.0 (7.2.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 17 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Adafruit SPIFlash @ 3.9.1+sha.2ea4edf
|   |-- SPI @ 1.0
|   |   |-- Adafruit TinyUSB Library
|   |-- SdFat - Adafruit Fork @ 1.5.1
|   |   |-- SPI @ 1.0
|   |   |   |-- Adafruit TinyUSB Library
|   |-- Adafruit TinyUSB Library
Building in release mode
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\Adafruit_TinyUSB_API.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\Adafruit_USBD_CDC.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\Adafruit_USBD_Device.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\hid\Adafruit_USBD_HID.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\midi\Adafruit_USBD_MIDI.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\msc\Adafruit_USBD_MSC.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\ports\esp32\Adafruit_TinyUSB_esp32.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\ports\nrf\Adafruit_TinyUSB_nrf.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\ports\rp2040\Adafruit_TinyUSB_rp2040.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\ports\samd\Adafruit_TinyUSB_samd.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\arduino\webusb\Adafruit_USBD_WebUSB.cpp.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\audio\audio_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\bth\bth_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\cdc\cdc_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\dfu\dfu_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\dfu\dfu_rt_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\hid\hid_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\midi\midi_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\msc\msc_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\net\ecm_rndis_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\net\ncm_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\usbtmc\usbtmc_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\class\vendor\vendor_device.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\common\tusb_fifo.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\device\usbd.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\device\usbd_control.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\espressif\esp32sx\dcd_esp32sx.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\microchip\samd\dcd_samd.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\nordic\nrf5x\dcd_nrf5x.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\nxp\transdimension\dcd_transdimension.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\raspberrypi\rp2040\dcd_rp2040.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\raspberrypi\rp2040\hcd_rp2040.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\portable\raspberrypi\rp2040\rp2040_usb.c.o
Compiling .pio\build\wiscore_rak4631\liba45\Adafruit_TinyUSB_Arduino\tusb.c.o
Compiling .pio\build\wiscore_rak4631\src\main.cpp.o
Compiling .pio\build\wiscore_rak4631\libc2f\SPI\SPI.cpp.o
Compiling .pio\build\wiscore_rak4631\libc2f\SPI\SPI_nrf52832.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FatFile.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FatFileLFN.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FatFilePrint.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FatFileSFN.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FatVolume.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\FmtNumber.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\StdioStream.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\fstream.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\istream.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\FatLib\ostream.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\MinimumSerial.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SdCard\SdSpiCard.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SdCard\SdSpiCardEX.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SdCard\SdioCardEX.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SdCard\SdioTeensy.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiESP8266.cpp.o
Archiving .pio\build\wiscore_rak4631\libc2f\libSPI.a
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiParticle.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiSAM3X.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiSAMD.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiSTM32.cpp.o
Compiling .pio\build\wiscore_rak4631\lib12b\SdFat - Adafruit Fork\SpiDriver\SdSpiTeensy3.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\Adafruit_FlashCache.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\Adafruit_SPIFlash.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\Adafruit_SPIFlashBase.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\esp32\Adafruit_FlashTransport_ESP32.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\qspi\Adafruit_FlashTransport_QSPI_NRF.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\qspi\Adafruit_FlashTransport_QSPI_SAMD.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\rp2040\Adafruit_FlashTransport_RP2040.cpp.o
Compiling .pio\build\wiscore_rak4631\lib229\Adafruit SPIFlash\spi\Adafruit_FlashTransport_SPI.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduinoVariant\variant.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\HardwarePWM.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\Print.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\RingBuffer.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\Uart.cpp.o
Archiving .pio\build\wiscore_rak4631\libFrameworkArduinoVariant.a
Archiving .pio\build\wiscore_rak4631\lib12b\libSdFat - Adafruit Fork.a
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\WInterrupts.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\WString.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\abi.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\avr\dtostrf.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\delay.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\croutine.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\event_groups.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\list.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\portable\MemMang\heap_3.c.o
Archiving .pio\build\wiscore_rak4631\lib229\libAdafruit SPIFlash.a
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\queue.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\stream_buffer.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\tasks.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\Source\timers.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\portable\CMSIS\nrf52\port_cmsis.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\portable\CMSIS\nrf52\port_cmsis_systick.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\freertos\portable\GCC\nrf52\port.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\hooks.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\itoa.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\linker\gcc_startup_nrf52.S.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\linker\gcc_startup_nrf52840.S.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\main.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\new.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_gpiote.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_power.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_pwm.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_qspi.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_spim.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\drivers\src\nrfx_timer.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\mdk\system_nrf52.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\nordic\nrfx\mdk\system_nrf52840.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\pulse.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\pulse_asm.S.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\rtos.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\Config\SEGGER_SYSVIEW_Config_FreeRTOS.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\SEGGER\SEGGER_RTT.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\SEGGER\SEGGER_RTT_ASM_ARMv7M.S.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\SEGGER\SEGGER_RTT_printf.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\SEGGER\SEGGER_SYSVIEW.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\sysview\SEGGER_SYSVIEW_FreeRTOS.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\utility\AdaCallback.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\utility\SoftwareTimer.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\utility\adafruit_fifo.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\utility\debug.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\utility\utilities.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring_analog.cpp.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring_analog_nRF52.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring_digital.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring_private.c.o
Compiling .pio\build\wiscore_rak4631\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\wiscore_rak4631\libFrameworkArduino.a
Linking .pio\build\wiscore_rak4631\firmware.elf
Building .pio\build\wiscore_rak4631\firmware.hex
Checking size .pio\build\wiscore_rak4631\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   2.9% (used 7132 bytes from 248832 bytes)
Flash: [=         ]   5.1% (used 41652 bytes from 815104 bytes)
Building .pio\build\wiscore_rak4631\firmware.zip
Zip created at .pio\build\wiscore_rak4631\firmware.zip
============================================= [SUCCESS] Took 8.22 seconds =============================================

Okay, will check that.

It compiles successfully for me as well in the new project.

Try deleting the .pio folder in the project where it doesn’t work. It may have outdated libraries. (git links are not really stable…).

If that does not work, can you share the whole non-working project? Or reduce it down until but still with the same error?

Okay, I’ll try deleting the .pio folder.

Could you test again with that new project by using the following platformio.ini, the last two libraries seem to be causing the problem/ conflict in my main project :

; 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:wiscore_rak4631]
platform = nordicnrf52@9.3.0
board = wiscore_rak4631
framework = arduino
lib_deps = 
    https://github.com/adafruit/Adafruit_SPIFlash
    https://github.com/sparkfun/SparkFun_LIS3DH_Arduino_Library
    https://github.com/sparkfun/SparkFun_u-blox_GNSS_Arduino_Library

No, still working.

Checking size .pio\build\wiscore_rak4631\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   2.9% (used 7132 bytes from 248832 bytes)
Flash: [=         ]   5.1% (used 41652 bytes from 815104 bytes)
Building .pio\build\wiscore_rak4631\firmware.zip
Zip created at .pio\build\wiscore_rak4631\firmware.zip
============================================= [SUCCESS] Took 14.35 seconds =============================================

I updated my src/main.cpp to

#include <Arduino.h>
#include "Adafruit_SPIFlash.h"
#include "SparkFunLIS3DH.h"
#include "SparkFun_u-blox_GNSS_Arduino_Library.h"

void setup() {}
void loop() {}

accordingly so that every library declared in lib_deps is included in the main source file (otherwise the LDF does not resolve it).

I’m also using PIO core 6.x alpha actually. (pio upgrade --dev).