Hi all,
I am currently in a struggle with “private lib” compilation.
Here is the log:
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ platformio run
*********************************************************************************************************************************************
Obsolete PIO Core v3.4.1 is used (previous was 3.5.0a16)
Please remove multiple PIO Cores from a system:
http://docs.platformio.org/page/faq.html#multiple-pio-cores-in-a-system
*********************************************************************************************************************************************
[Fri Oct 6 21:11:40 2017] Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Collected 24 compatible libraries
Looking for dependencies...
Library Dependency Graph
|-- <utils>
Compiling .pioenvs/nodemcuv2/src/main.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/HardwareSerial.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/IPAddress.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/MD5Builder.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Print.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Schedule.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Stream.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/StreamString.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Tone.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Updater.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/WMath.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/WString.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/abi.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/base64.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cbuf.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cont.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cont_util.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_eboot_command.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_flash_utils.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_i2s.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_main.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_noniso.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_phy.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_postmortem.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_si2c.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_timer.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_analog.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_digital.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_pulse.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_pwm.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_shift.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/debug.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/heap.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libb64/cdecode.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libb64/cencode.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libc_replacements.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/pgmspace.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/setjmp.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_cache.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_check.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_gc.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_hydrogen.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_nucleus.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs_api.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs_hal.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/time.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/uart.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/umm_malloc/umm_malloc.o
Compiling .pioenvs/nodemcuv2/lib/utils/utils.o
Archiving .pioenvs/nodemcuv2/lib/libutils.a
Indexing .pioenvs/nodemcuv2/lib/libutils.a
Archiving .pioenvs/nodemcuv2/libFrameworkArduino.a
Indexing .pioenvs/nodemcuv2/libFrameworkArduino.a
Linking .pioenvs/nodemcuv2/firmware.elf
.pioenvs/nodemcuv2/src/main.o:(.text.setup+0x0): undefined reference to `setup_builtin_led()'
.pioenvs/nodemcuv2/src/main.o: In function `setup':
main.cpp:(.text.setup+0xa): undefined reference to `setup_builtin_led()'
.pioenvs/nodemcuv2/src/main.o:(.text.loop+0x0): undefined reference to `ImAlive()'
.pioenvs/nodemcuv2/src/main.o: In function `loop':
main.cpp:(.text.loop+0xa): undefined reference to `ImAlive()'
collect2: error: ld returned 1 exit status
*** [.pioenvs/nodemcuv2/firmware.elf] Error 1
========================================================= [ERROR] Took 5.03 seconds =========================================================
Project_name
├── lib
│ ├── readme.txt
│ └── utils
│ ├── utils.c
│ └── utils.h
├── platformio.ini
└── src
└── main.cpp
3 directories, 5 files
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat src/main.cpp
#include <Arduino.h>
#include <utils.h>
void setup() {
setup_builtin_led();
}
void loop() {
// put your main code here, to run repeatedly:
ImAlive();
}
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat lib/utils/*
#include <Arduino.h>
void setup_builtin_led(void){
digitalWrite(LED_BUILTIN, HIGH);
pinMode(LED_BUILTIN, OUTPUT);
}
void ImAlive(void){
digitalWrite(BUILTIN_LED, LOW);
delay(100);
digitalWrite(BUILTIN_LED, HIGH);
delay(400);
}
/* PROJ_UTILS_H */
#ifndef PROJ_UTILS_H
#define PROJ_UTILS_H
void setup_builtin_led(void);
void ImAlive(void);
#endif /* PROJ_UTILS_H */
I am wondering what is false as I followed instructions given in the libs/README,
but I have no clue of what is wrong…
I have to say that it may be a dumb error, as I did not write a single code line since a looong time now…
Thank you for your help !
John
October 8, 2017, 3:07pm
#2
Try renaming your ‘utils’ files to ‘myUtils’. Might be a conflict.
Hi John,
I tried to reinstall platformio, as I had a message about “not-up-to-date” version.
But it doesn’t change anything.
I tried what you asked me, changing names, but the same issue occurs:
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ platformio run
*****************************************************************************************************************************************
If you like PlatformIO, please:
- follow us on Twitter to stay up-to-date on the latest project news > https://twitter.com/PlatformIO_Org
- star it on GitHub > https://github.com/platformio/platformio
- try PlatformIO IDE for IoT development > http://platformio.org/platformio-ide
- support us with PlatformIO Plus > https://pioplus.com
*****************************************************************************************************************************************
[Sun Oct 8 18:53:26 2017] Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------
PlatformManager: Installing espressif8266
Downloading [####################################] 100%
Unpacking [####################################] 100%
espressif8266 @ 1.4.0 has been successfully installed!
The platform 'espressif8266' has been successfully installed!
The rest of packages will be installed automatically depending on your build environment.
PackageManager: Installing toolchain-xtensa @ ~1.40802.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
PackageManager: Installing tool-esptool @ ~1.409.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
PackageManager: Installing framework-arduinoespressif8266 @ ~1.20300.1
Downloading [####################################] 100%
Unpacking [####################################] 100%
CorePackageManager: Installing tool-scons @ ~3.20501.2
Downloading [####################################] 100%
Unpacking [####################################] 100%
tool-scons @ 3.20501.2 has been successfully installed!
Verbose mode can be enabled via `-v, --verbose` option
Collected 24 compatible libraries
Looking for dependencies...
Library Dependency Graph
|-- <myUtils>
Compiling .pioenvs/nodemcuv2/src/main.o
Archiving .pioenvs/nodemcuv2/libFrameworkArduinoVariant.a
Indexing .pioenvs/nodemcuv2/libFrameworkArduinoVariant.a
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Esp.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/FS.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/HardwareSerial.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/IPAddress.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/MD5Builder.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Print.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Schedule.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Stream.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/StreamString.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Tone.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/Updater.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/WMath.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/WString.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/abi.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/base64.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cbuf.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cont.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/cont_util.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_eboot_command.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_flash_utils.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_i2s.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_main.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_noniso.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_phy.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_postmortem.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_si2c.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_timer.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_analog.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_digital.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_pulse.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_pwm.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/core_esp8266_wiring_shift.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/debug.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/heap.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libb64/cdecode.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libb64/cencode.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/libc_replacements.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/pgmspace.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/setjmp.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_cache.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_check.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_gc.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_hydrogen.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs/spiffs_nucleus.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs_api.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/spiffs_hal.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/time.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/uart.o
Compiling .pioenvs/nodemcuv2/FrameworkArduino/umm_malloc/umm_malloc.o
Compiling .pioenvs/nodemcuv2/lib/myUtils/myUtils.o
Archiving .pioenvs/nodemcuv2/lib/libmyUtils.a
Indexing .pioenvs/nodemcuv2/lib/libmyUtils.a
Archiving .pioenvs/nodemcuv2/libFrameworkArduino.a
Indexing .pioenvs/nodemcuv2/libFrameworkArduino.a
Linking .pioenvs/nodemcuv2/firmware.elf
.pioenvs/nodemcuv2/src/main.o:(.text.setup+0x0): undefined reference to `setup_builtin_led()'
.pioenvs/nodemcuv2/src/main.o: In function `setup':
main.cpp:(.text.setup+0xa): undefined reference to `setup_builtin_led()'
.pioenvs/nodemcuv2/src/main.o:(.text.loop+0x0): undefined reference to `ImAlive()'
.pioenvs/nodemcuv2/src/main.o: In function `loop':
main.cpp:(.text.loop+0xa): undefined reference to `ImAlive()'
collect2: error: ld returned 1 exit status
*** [.pioenvs/nodemcuv2/firmware.elf] Error 1
====================================================== [ERROR] Took 27.66 seconds ======================================================
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ tree
.
├── lib
│ ├── myUtils
│ │ ├── myUtils.c
│ │ └── myUtils.h
│ └── readme.txt
├── platformio.ini
└── src
└── main.cpp
3 directories, 5 files
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat lib/myUtils/myUtils.c
#include <Arduino.h>
void setup_builtin_led(void){
digitalWrite(LED_BUILTIN, HIGH);
pinMode(LED_BUILTIN, OUTPUT);
}
void ImAlive(void){
digitalWrite(BUILTIN_LED, LOW);
delay(100);
digitalWrite(BUILTIN_LED, HIGH);
delay(400);
}
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat lib/myUtils/myUtils.h
/* MYUTILS_H */
#ifndef MYUTILS_H
#define MYUTILS_H
void setup_builtin_led(void);
void ImAlive(void);
#endif /* MYUTILS_H */
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat src/main.cpp
#include <Arduino.h>
#include <myUtils.h>
void setup() {
setup_builtin_led();
}
void loop() {
// put your main code here, to run repeatedly:
ImAlive();
}
Apparently, it seems to detect and compile my lib, so would the issue be during linking ?
I did not modify default platformio.ini file which is the following:
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat platformio.ini
; 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
; http://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
John
October 8, 2017, 5:29pm
#4
I found this in PIO docs. It appears “LED_BUILTIN” might not be defined for that board. Make sure you set the led pin correctly for your board. Hope it works.
#include “Arduino.h”
#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif
OK,
So I was missing the basics…
I am compiling C files in what seems to be a CPP project.
adding the “extern “C” { }” directive lets me now compiling fine:
fxois@ThinkPad-T420:~/Documents/PlatformIO/Projects/bip_portail$ cat lib/myUtils/myUtils.h
/* MYUTILS_H */
#ifndef MYUTILS_H
#define MYUTILS_H
#ifdef __cplusplus
extern "C" {
#endif
void setup_builtin_led(void);
void ImAlive(void);
#ifdef __cplusplus
}
#endif
#endif /* MYUTILS_H */
Thank you !