我正在尝试在用Sming 2.1.0开发的ESP8266固件中使用std :: map(在Windows 7 SP1上)。
我遇到以下错误:

undefined reference to `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'


根据此http://www.esp8266.com/viewtopic.php?p=40593和此ESP8266 for Arduino IDE (xtensa-lx106-elf-gcc) and std::map linking error,应将-lstdc ++(可能还有-lsupc ++)添加到要链接的库列表中。

但是在Sming的Makefile-project.mk中有-nostdlib标志!

LDFLAGS = -nostdlib ...


如果我将其更改为-lstdc ++ -lsupc ++,则会得到这些错误:

c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.1.0/../../../../xtensa-lx106-elf/bin/ld.exe: cannot find crt1-sim.o: No such file or directory
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.1.0/../../../../xtensa-lx106-elf/bin/ld.exe: cannot find _vectors.o: No such file or directory


为了解决这个问题,https://www.reddit.com/r/esp8266/comments/3pmyx8/trying_to_link_but_getting_weird_errors/建议以下内容:


  尝试使用-nostdlib链接选项。


辉煌!

我试图使用来自arduino-esp8266的xtensa-lx106-elf
https://github.com/rogerclarkmelbourne/arduino-esp8266/tree/master/tools/xtensa-lx106-elf(它包括crt1-sim.o,_vectors.o和其他库),但没有帮助。

我还没有找到最终答案:“是否有办法在Sming中使用std :: map等?”

在此先感谢您的帮助。

最佳答案

毕竟要建立它。最后,这很简单。

我应该将stdc ++ supc ++添加到LIBS中而不是添加到LDFLAGS中
那是:

LIBS = stdc++ supc++ microc ...


并保持LDFLAGS不变(使用-nostdlib)

LDFLAGS = -nostdlib ...

关于c++ - 是否可以在Sming IDE(ESP8266)中使用std::map?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38557151/

10-11 16:18