1

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

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

根据这个http://www.esp8266.com/viewtopic.php?p=40593和这个用于 Arduino IDE (xtensa-lx106-elf-gcc) 的 ESP8266 和 std::map 链接错误,应该添加 -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 等?”

提前感谢您的帮助。

4

1 回答 1

0

毕竟建立它。最后很简单。

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

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

并保持 LDFLAGS 相同(使用 -nostdlib)

LDFLAGS = -nostdlib ...
于 2016-07-24T22:50:06.903 回答