homieiot / homie-esp8266

💡 ESP8266 framework for Homie, a lightweight MQTT convention for the IoT
http://homieiot.github.io/homie-esp8266
MIT License
1.36k stars 308 forks source link

Compilation failure on ESP8266 #733

Closed Keiishu closed 2 years ago

Keiishu commented 2 years ago

Hi,

I'm unable to compile my sketch on PlatformIO 6.1.4, with ESP8266 4.0.1. Same thing on Arduino IDE 2.0.0 (with ESP8266 3.0.2). Same thing using the latest commit on the develop branch, and with the latest release as well.

Error ``` In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp: In instantiation of 'Print& operator<<(Print&, T) [with T = HomieInternals::Property*]': Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\ConnAckPacket.cpp.o src\main.cpp:240:51: required from here .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:15: error: no matching function for call to 'print(HomieInternals::Property*&)' 5 | { stream.print(arg); return stream; } | ~~~~~~~~~~~~^~~~~ ``` `no matching function for call to 'print(HomieInternals::Property*&)'` `invalid conversion from 'HomieInternals::Property*' to 'long long unsigned int' [-fpermissive]`
Complete Output ``` Processing proxsens_server (platform: espressif8266; board: esp07s; framework: arduino) ---------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp07s.html PLATFORM: Espressif 8266 (4.0.1) > Espressif Generic ESP8266 ESP-07S HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash PACKAGES: - framework-arduinoespressif8266 @ 3.30002.0 (3.0.2) - tool-esptool @ 1.413.0 (4.13) - tool-esptoolpy @ 1.30000.201119 (3.0.0) - toolchain-xtensa @ 2.100300.210717 (10.3.0) LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 42 compatible libraries Scanning dependencies... Dependency Graph |-- ESP8266 and ESP32 OLED driver for SSD1306 displays @ 4.3.0 | |-- Wire @ 1.0 |-- Homie @ 3.0.1 | |-- ArduinoJson @ 6.11.5 | |-- AsyncMqttClient @ 0.8.2 | | |-- ESPAsyncTCP @ 1.2.0 | |-- Bounce2 @ 2.71.0 | |-- ESP Async WebServer @ 1.2.3 | | |-- ESPAsyncTCP @ 1.2.0 | | |-- Hash @ 1.0 | | |-- ESP8266WiFi @ 1.0 | |-- Ticker @ 1.0 | |-- ESP8266WiFi @ 1.0 | |-- DNSServer @ 1.1.1 | | |-- ESP8266WiFi @ 1.0 | |-- ESP8266HTTPClient @ 1.2 | | |-- ESP8266WiFi @ 1.0 | |-- ESPAsyncTCP @ 1.2.0 | |-- ESP8266mDNS @ 1.2 | | |-- ESP8266WiFi @ 1.0 |-- Wire @ 1.0 Building in release mode Compiling .pio\build\proxsens_server\src\main.cpp.o Generating LD script .pio\build\proxsens_server\ld\local.eagle.app.v6.common.ld Compiling .pio\build\proxsens_server\libf21\Wire\Wire.cpp.o Compiling .pio\build\proxsens_server\lib169\ESP8266 and ESP32 OLED driver for SSD1306 displays\OLEDDisplay.cpp.o Compiling .pio\build\proxsens_server\lib169\ESP8266 and ESP32 OLED driver for SSD1306 displays\OLEDDisplayUi.cpp.o Archiving .pio\build\proxsens_server\libf21\libWire.a Indexing .pio\build\proxsens_server\libf21\libWire.a Compiling .pio\build\proxsens_server\libebf\ESPAsyncTCP\AsyncPrinter.cpp.o Compiling .pio\build\proxsens_server\libebf\ESPAsyncTCP\ESPAsyncTCP.cpp.o Archiving .pio\build\proxsens_server\lib169\libESP8266 and ESP32 OLED driver for SSD1306 displays.a Indexing .pio\build\proxsens_server\lib169\libESP8266 and ESP32 OLED driver for SSD1306 displays.a Compiling .pio\build\proxsens_server\libebf\ESPAsyncTCP\ESPAsyncTCPbuffer.cpp.o .pio\libdeps\proxsens_server\ESPAsyncTCP\src\ESPAsyncTCP.cpp: In member function 'err_t AsyncClient::_sent(tcp_pcb*, uint16_t)': .pio\libdeps\proxsens_server\ESPAsyncTCP\src\ESPAsyncTCP.cpp:380:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation] 380 | if(_sent_cb) | ^~ .pio\libdeps\proxsens_server\ESPAsyncTCP\src\ESPAsyncTCP.cpp:382:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' 382 | _tx_acked_len = 0; | ^~~~~~~~~~~~~ Compiling .pio\build\proxsens_server\libebf\ESPAsyncTCP\SyncClient.cpp.o Compiling .pio\build\proxsens_server\libebf\ESPAsyncTCP\tcp_axtls.c.o cc1.exe: warning: command-line option '-fpermissive' is valid for C++/ObjC++ but not for C Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient.cpp.o In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp: In instantiation of 'Print& operator<<(Print&, T) [with T = HomieInternals::Property*]': Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\ConnAckPacket.cpp.o src\main.cpp:240:51: required from here .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:15: error: no matching function for call to 'print(HomieInternals::Property*&)' 5 | { stream.print(arg); return stream; } | ~~~~~~~~~~~~^~~~~ In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:87:16: note: candidate: 'size_t Print::print(char)' (near match) 87 | size_t print(char); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:87:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'char' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:88:16: note: candidate: 'size_t Print::print(unsigned char, int)' (near match) 88 | size_t print(unsigned char, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:88:16: note: conversion of argument 1 would be ill-formed: Archiving .pio\build\proxsens_server\libebf\libESPAsyncTCP.a In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, Indexing .pio\build\proxsens_server\libebf\libESPAsyncTCP.a from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'unsigned char' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\PingRespPacket.cpp.o | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:89:16: note: candidate: 'size_t Print::print(int, int)' (near match) 89 | size_t print(int, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:89:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\PubAckPacket.cpp.o from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:90:16: note: candidate: 'size_t Print::print(unsigned int, int)' (near match) 90 | size_t print(unsigned int, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:90:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'unsigned int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:91:16: note: candidate: 'size_t Print::print(long int, int)' (near match) 91 | size_t print(long, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:91:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'long int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\PubCompPacket.cpp.o from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:92:16: note: candidate: 'size_t Print::print(long unsigned int, int)' (near match) 92 | size_t print(unsigned long, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:92:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\PubRecPacket.cpp.o from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'long unsigned int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:93:16: note: candidate: 'size_t Print::print(long long int, int)' (near match) 93 | size_t print(long long, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:93:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'long long int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* Compiling .pio\build\proxsens_server\lib69d\AsyncMqttClient\AsyncMqttClient\Packets\PubRelPacket.cpp.o In file included from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Stream.h:27, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/HardwareSerial.h:32, from C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Arduino.h:288, from src\main.cpp:3: C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:94:16: note: candidate: 'size_t Print::print(long long unsigned int, int)' (near match) 94 | size_t print(unsigned long long, int = DEC); | ^~~~~ C:\Users\Martin\.platformio\packages\framework-arduinoespressif8266\cores\esp8266/Print.h:94:16: note: conversion of argument 1 would be ill-formed: In file included from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Helpers.hpp:5, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/Validation.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Config.hpp:13, from .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/Interface.hpp:7, from .pio\libdeps\proxsens_server\Homie\src/Homie.hpp:6, from .pio\libdeps\proxsens_server\Homie\src/Homie.h:4, from src\main.cpp:4: .pio\libdeps\proxsens_server\Homie\src/Homie/Datatypes/../Utils/../../StreamingOperator.hpp:5:16: warning: invalid conversion from 'HomieInternals::Property*' to 'long long unsigned int' [-fpermissive] 5 | { stream.print(arg); return stream; } | ^~~ | | | HomieInternals::Property* *** [.pio\build\proxsens_server\src\main.cpp.o] Error 1 =========================================================== [FAILED] Took 26.50 seconds =========================================================== ```

Apparently, the code causing this issue is from StreamingOperator.hpp, line 5 :

#pragma once

template<class T>
inline Print &operator <<(Print &stream, T arg)
{ stream.print(arg); return stream; }

enum _EndLineCode { endl };

inline Print &operator <<(Print &stream, _EndLineCode arg)
{ stream.println(); return stream; }
luebbe commented 2 years ago

Hmm, I can compile my projects, but I'm using the #develop branch, not #master. Maybe that's the reason?

Keiishu commented 2 years ago

Thanks for your response. In the end, it was just a line I forgot to delete... My bad.