Я пытаюсь использовать std :: map в прошивке ESP8266, разрабатываемой с помощью Sming 2.1.0 (в Windows 7 SP1).
У меня следующая ошибка:
undefined reference to `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
Согласно этому http://www.esp8266.com/viewtopic.php?p=40593 и это ESP8266 для Arduino IDE (xtensa-lx106-elf-gcc) и std :: map link error необходимо добавить -lstdc ++ (и, возможно, -lsupc ++) в список библиотек, с которыми можно связываться.
Но в Makefile-project.mk в Sming есть флаг -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 link.
Brilliant!
Я пытался использовать xtensa-lx106-elf из arduino-esp8266
https://github.com/rogerclarkmelbourne/arduino-esp8266/tree/master/tools/xtensa-lx106-elf (включает в себя crt1-sim.o, _vectors.o и другие библиотеки), но это не помогает.
Я не нашел окончательного ответа: «Есть ли способ использовать std :: map и так далее в Sming?»
Заранее спасибо за помощь.
Постройте это в конце концов. В конце концов это было просто.
Я должен добавить stdc ++ supc ++ в LIBS, а не в LDFLAGS
То есть:
LIBS = stdc++ supc++ microc ...
И остаются LDFLAGS одинаковыми (с -nostdlib)
LDFLAGS = -nostdlib ...
Других решений пока нет …