ESP8266WebServer 上的 ESP8266 与 Platform.io 编译错误

问题描述

我最近发现了 platform.ioVSC 插件,并决定试一试。以前将 Visual StudioVisual Micro 插件一起使用,但遗憾的是 Mac 上的 IDE 中没有 C++ 支持。我不可能使用 Arduino IDE。

一切正常,直到我想使用 ESP8266WebServer.h。即使我只包含头文件,也会出现编译错误

尝试使用 Arduino 板管理器提供的库 - 仍然相同。如果我编译一个包含所有内容的空 Arduino 项目很好,但是我将项目转换为 Arduino IDE(使用 .ino 而不是 main.cpp)的同样错误

platformio.ini 文件如下:

[env:nodemcu]
platform = espressif8266
board = nodemcu
framework = arduino
lib_extra_dirs =
    /Users/.../Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer

lib_deps =
    bblanchon/ArduinoJson@^6.18.0
    ivanseidel/LinkedList@0.0.0-alpha+sha.dac3874d28
    bodmer/TFT_eSPI@^2.3.70

完整的错误消息在这里,一些警告很好。 包含声明在这里In file included from src/WeatherServer/WeatherServer.cpp:3

Compiling .pio/build/nodemcu/src/WeatherServer/WeatherServer.cpp.o
In file included from .pio/libdeps/nodemcu/TFT_eSPI/TFT_eSPI.h:811,from include/display.h:4,from include/Overlay.h:4,from include/WeatherServer.h:4,from src/WeatherServer/WeatherServer.cpp:1:
.pio/libdeps/nodemcu/TFT_eSPI/Extensions/Smooth_font.h:47:23: warning: 'SPIFFS' is deprecated: SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems. [-Wdeprecated-declarations]
   47 |   fs::FS   &fontFS  = SPIFFS;
      |                       ^~~~~~
In file included from .pio/libdeps/nodemcu/TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,from .pio/libdeps/nodemcu/TFT_eSPI/TFT_eSPI.h:67,from src/WeatherServer/WeatherServer.cpp:1:
/Users/strautins/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:275:15: note: declared here
  275 | extern fs::FS SPIFFS __attribute__((deprecated("SPIFFS has been deprecated. Please consider moving to LittleFS or other filesystems.")));
      |               ^~~~~~
In file included from /Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h:30,from /Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:340,from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:69:28: error: expected ')' before '&' token
   69 |     StaticRequestHandler(FS& fs,const char* path,const char* uri,const char* cache_header)
      |                         ~  ^
      |                            )
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:88:5: error: 'FS' does not name a type; did you mean 'SS'?
   88 |     FS _fs;
      |     ^~
      |     SS
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:102:37: error: expected ')' before '&' token
  102 |     StaticDirectoryRequestHandler(FS& fs,const char* cache_header)
      |                                  ~  ^
      |                                     )
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:106:5: error: expected unqualified-id before '{' token
  106 |     {}
      |     ^
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h: In member function 'bool esp8266webserver::StaticDirectoryRequestHandler<ServerType>::handle(esp8266webserver::StaticDirectoryRequestHandler<ServerType>::WebServerType&,HTTPMethod,const String&)':
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:150:9: error: 'File' was not declared in this scope; did you mean 'fs::File'?
  150 |         File f = SRH::_fs.open(path,"r");
      |         ^~~~
      |         fs::File
In file included from .pio/libdeps/nodemcu/TFT_eSPI/Processors/TFT_eSPI_ESP8266.h:35,from src/WeatherServer/WeatherServer.cpp:1:
/Users/strautins/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/FS.h:52:7: note: 'fs::File' declared here
   52 | class File : public Stream
      |       ^~~~
In file included from /Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h:30,from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:151:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  151 |         if (!f)
      |              ^
      |              fs
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:154:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  154 |         if (!f.isFile()) {
      |              ^
      |              fs
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:162:27: error: 'f' was not declared in this scope; did you mean 'fs'?
  162 |         server.streamFile(f,contentType,requestMethod);
      |                           ^
      |                           fs
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h: At global scope:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:179:32: error: expected ')' before '&' token
  179 |     StaticFileRequestHandler(FS& fs,const char* cache_header)
      |                             ~  ^
      |                                )
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:182:5: error: expected unqualified-id before '{' token
  182 |     {
      |     ^
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h: In member function 'bool esp8266webserver::StaticFileRequestHandler<ServerType>::handle(esp8266webserver::StaticFileRequestHandler<ServerType>::WebServerType&,const String&)':
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:207:9: error: 'File' was not declared in this scope; did you mean 'fs::File'?
  207 |         File f = SRH::_fs.open(SRH::_path,from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:209:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  209 |         if (!f)
      |              ^
      |              fs
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:212:14: error: 'f' was not declared in this scope; did you mean 'fs'?
  212 |         if (!f.isFile()) {
      |              ^
      |              fs
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h:222:27: error: 'f' was not declared in this scope; did you mean 'fs'?
  222 |         server.streamFile(f,mime::getContentType(SRH::_path),requestMethod);
      |                           ^
      |                           fs
In file included from /Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:340,from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h: At global scope:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h:258:73: error: 'FS' has not been declared
  258 | void ESP8266WebServerTemplate<ServerType>::serveStatic(const char* uri,FS& fs,const char* cache_header) {
      |                                                                         ^~
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h:258:6: error: no declaration matches 'void esp8266webserver::ESP8266WebServerTemplate<ServerType>::serveStatic(const char*,int&,const char*,const char*)'
  258 | void ESP8266WebServerTemplate<ServerType>::serveStatic(const char* uri,const char* cache_header) {
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:121:8: note: candidate is: 'void esp8266webserver::ESP8266WebServerTemplate<ServerType>::serveStatic(const char*,fs::FS&,const char*)'
  121 |   void serveStatic(const char* uri,fs::FS& fs,const char* cache_header = NULL );
      |        ^~~~~~~~~~~
In file included from src/WeatherServer/WeatherServer.cpp:3:
/Users/strautins/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:92:7: note: 'class esp8266webserver::ESP8266WebServerTemplate<ServerType>' defined here
   92 | class ESP8266WebServerTemplate
      |       ^~~~~~~~~~~~~~~~~~~~~~~~
*** [.pio/build/nodemcu/src/WeatherServer/WeatherServer.cpp.o] Error 1
=========================================================== [Failed] Took 1.44 seconds ===========================================================

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)