首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino编译器和STL:使用std::vector和std::map

Arduino编译器和STL:使用std::vector和std::map
EN

Stack Overflow用户
提问于 2020-06-06 03:40:05
回答 2查看 1.7K关注 0票数 2

虽然许多帖子说,STL库通常不适用于arduino/embedded系统,但它们似乎安装在我的Arduino编译器上!还有很多工作。

问题:(所示完整草图)

代码语言:javascript
运行
复制
std::vector<int> foo;         // this works fine
std::map<int,int> bar;    // adding this gives an error

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


sketch_jun05a:4:1: error: 'map' in namespace 'std' does not name a type
 std::map<int,int> bar;
 ^

所以我不知道为什么std::会起作用,但是std::map不起作用。

编译平台:目标: Ardunio.app 1.8.12 : ESP8266

下面粘贴了详细的错误消息。

分析:

我在我的arduino应用程序中搜索map.h,我找到了一个看起来很广泛的STL库类,包括stl_map.h。

它们位于我的系统中,位于这条路径上:

代码语言:javascript
运行
复制
~/Library/Arduino15/packages//esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/xtensa-lx106-elf/include/c++/4.8.2

and most of the interesting looking headers are in a subdir called "bits".

另一件奇怪的事情是,std::vector不包含任何头文件就能工作。这对我来说是意外的。

我没有配置我的搜索路径,也没有设置任何环境变量,所以无论Arduino应用程序安装了什么,都是它正在搜索的路径。

我也找不到关于这个的任何文档.

我发现的每一件事都表明,Arduino/isn 8266没有STL!我确实找到了一些名为ArduinoSTL和avr_stl的gitbub项目库,之前我确实将它们安装为本地用户库(不是在系统库中),但我并没有在上面的草图中导入这些库。

以下是完整的错误消息:

代码语言:javascript
运行
复制
/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/cems/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/cems/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/cems/Documents/Arduino/libraries -fqbn=esp8266:esp8266:d1:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=3000000 -vid-pid=1A86_7523 -ide-version=10812 -build-path /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707 -warnings=none -build-cache /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_cache_761223 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 -prefs=runtime.tools.xtensa-lx106-elf-gcc-2.5.0-4-b40a506.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs-2.5.0-4-b40a506.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 -prefs=runtime.tools.python3.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1 -prefs=runtime.tools.python3-3.7.2-post1.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1 -prefs=runtime.tools.mklittlefs.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-fe5bb56 -prefs=runtime.tools.mklittlefs-2.5.0-4-fe5bb56.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-fe5bb56 -verbose /Users/cems/Documents/Arduino/sketch_jun05a/sketch_jun05a.ino
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/cems/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/cems/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/cems/Documents/Arduino/libraries -fqbn=esp8266:esp8266:d1:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=3000000 -vid-pid=1A86_7523 -ide-version=10812 -build-path /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707 -warnings=none -build-cache /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_cache_761223 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.xtensa-lx106-elf-gcc.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 -prefs=runtime.tools.xtensa-lx106-elf-gcc-2.5.0-4-b40a506.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 -prefs=runtime.tools.mkspiffs-2.5.0-4-b40a506.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mkspiffs/2.5.0-4-b40a506 -prefs=runtime.tools.python3.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1 -prefs=runtime.tools.python3-3.7.2-post1.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1 -prefs=runtime.tools.mklittlefs.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-fe5bb56 -prefs=runtime.tools.mklittlefs-2.5.0-4-fe5bb56.path=/Users/cems/Library/Arduino15/packages/esp8266/tools/mklittlefs/2.5.0-4-fe5bb56 -verbose /Users/cems/Documents/Arduino/sketch_jun05a/sketch_jun05a.ino
Using board 'd1' from platform in folder: /Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1
Using core 'esp8266' from platform in folder: /Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1
Detecting libraries used...
/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/lwip2/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/libc/xtensa-lx106-elf/include -I/var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/core -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10812 -DARDUINO_ESP8266_WEMOS_D1R1 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_WEMOS_D1R1\"" -DFLASHMODE_DIO -DESP8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/cores/esp8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/variants/d1 /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/sketch/sketch_jun05a.ino.cpp -o /dev/null
Generating function prototypes...
/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/lwip2/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/libc/xtensa-lx106-elf/include -I/var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/core -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -ffunction-sections -fdata-sections -fno-exceptions -w -x c++ -E -CC -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10812 -DARDUINO_ESP8266_WEMOS_D1R1 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_WEMOS_D1R1\"" -DFLASHMODE_DIO -DESP8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/cores/esp8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/variants/d1 /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/sketch/sketch_jun05a.ino.cpp -o /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/preproc/ctags_target_for_gcc_minus_e.cpp
/Applications/Arduino.app/Contents/Java/tools-builder/ctags/5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/preproc/ctags_target_for_gcc_minus_e.cpp
Compiling sketch...
/Users/cems/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3 /Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/signing.py --mode header --publickey /Users/cems/Documents/Arduino/sketch_jun05a/public.key --out /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/core/Updater_Signing.h
/Users/cems/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++ -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/lwip2/include -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/tools/sdk/libc/xtensa-lx106-elf/include -I/var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/core -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10812 -DARDUINO_ESP8266_WEMOS_D1R1 -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_WEMOS_D1R1\"" -DFLASHMODE_DIO -DESP8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/cores/esp8266 -I/Users/cems/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/variants/d1 /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/sketch/sketch_jun05a.ino.cpp -o /var/folders/py/rycjfnrd0t13_pm4d11yyd2m0000gn/T/arduino_build_263707/sketch/sketch_jun05a.ino.cpp.o
sketch_jun05a:4:1: error: 'stl_map' in namespace 'std' does not name a type
 std::stl_map<int,int> bar;
 ^
exit status 1
'stl_map' in namespace 'std' does not name a type
EN

回答 2

Stack Overflow用户

发布于 2020-11-27 13:21:58

也许这能帮到一个人:

您可以在这里为Arduino IDE找到一个(非常老的) STL端口:https://github.com/maniacbug/StandardCplusplus

测试后注意:好,好,好.那个特别的库是错误的(有着令人讨厌的逐个错误!)尤其是在我不想重新发明的课程中)。

票数 0
EN

Stack Overflow用户

发布于 2022-11-04 16:38:11

神秘的是,矢量被esp8266核心包含在其他地方,而map却没有。幸运的是,显式包含map使我的编译器很高兴。Arduino IDE 1.8.13,esp8266内核3.02,windows 7 32位.

对于其他STL模板也是如此,如std::string,#include

代码语言:javascript
运行
复制
std::vector<int> foo;       // vector 'mysteriously' included elsewhere by esp8266 core
// As suggested by compiler along with 'map' error if map not user included:
//  "note: 'std::map' is defined in header '<map>'; did you forget to '#include <map>'?"
#include <map>              // user must include to use std::map (see above comment)
std::map<int, int> bar;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62227006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档