Существует ли с++ среда для esp8266?

x_arrange

New member
По перезагрузкам не глядя в код сложно что-то сказать.
Код собственно вот такой:
Код:
#include <map>

typedef std::map<int, int> Items;

void setup() {
  Items items;
  items[2]=5;
  //items.emplace(4,5);
}

void loop() {
}
А результат:
JavaScript:
sketch_oct31a.cpp.o: In function `loop':
C:\Program Files (x86)\Arduino/sketch_oct31a.ino:11: undefined reference to     `std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,     std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
sketch_oct31a.cpp.o: In function `_M_emplace_hint_unique<const     std::piecewise_construct_t&, std::tuple<int&&>, std::tuple<> >':
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-    elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-    elf\include\c++\4.8.2\bits/stl_tree.h:1673: undefined reference to     `std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*,     std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
sketch_oct31a.cpp.o: In function `std::_Rb_tree<int, std::pair<int const,     int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,     std::allocator<std::pair<int const, int> >     >::_M_erase(std::_Rb_tree_node<std::pair<int const, int> >*)':
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-    elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-    elf\include\c++\4.8.2\bits/stl_tree.h:1130: undefined reference to     `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
sketch_oct31a.cpp.o: In function `std::_Rb_tree_iterator<std::pair<int     const, int> >::operator--()':
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-    elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-    elf\include\c++\4.8.2\bits/stl_tree.h:204: undefined reference to     `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
sketch_oct31a.cpp.o:    (.text._ZNSt8_Rb_treeIiSt4pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get    _insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_[_ZNSt8_Rb_treeIiSt4    pairIKiiESt10_Select1stIS2_ESt4lessIiESaIS2_EE29_M_get_insert_hint_unique_posESt    23_Rb_tree_const_iteratorIS2_ERS1_]+0x0): undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)'
sketch_oct31a.cpp.o: In function `std::_Rb_tree<int, std::pair<int const,     int>, std::_Select1st<std::pair<int const, int> >, std::less<int>,     std::allocator<std::pair<int const, int> >     >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator<std::pair<int     const, int> >, int const&)':
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-    elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_tree.h:1431: undefined reference to `std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
c:\users\user\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits/stl_tree.h:1448: undefined reference to `std::_Rb_tree_increment(std::_Rb_tree_node_base*)'
collect2.exe: error: ld returned 1 exit status
Error compiling.
С удовольствием добавлю libstdc++.a в линковку. Подскажете как это сделать? :)
 

Sermus

New member
http://jcmvbkbc.spb.ru/~dumb/tmp/201502022210/libstdc++.a
Всё равно ерунда какая-то получается: если линковать с ним как есть -- в память не лезет.
Если загнать его во FLASH -- не дотягивается до функций из libc. Буду дальше думать.
jcmvbkbc, как-то топик ушел не в ту степь после этого поста. Хотел поинтересоваться додумали ли Вы что-нибудь по поводу libstdc++ во flash? Удалось добиться нормальной линковки с libc?
 

Sermus

New member
Можно, но пока нет ясности что происходит с libstdc++ какие гарантии, что другие нормально слинкуются? А пробовать все подряд пока случайно не получится - не моя философия.
Но за совет спасибо.
 

tonal

New member
Я советовал из тех соображений, что урезанные версии сильно проще чем полная libstdc++.
Т. е. их проще полностью просмотреть и слинковать - там считанное количество файлов.
А вот понять и правильно настроить libstdc++, ИМХО, изрядно труднее.
 

Medved2k

New member
Доброго время суток, возник вопрос к обитателям этой ветки форума - есть ли возможность у кого в личной переписке проконсультировать с написанием проекта для ESP на С, цель проекта портировать одну среду возможно с урезанным функционалом (по аппаратной части все вроде бы стыкуется, памяти хватит ), поэтому нужен человек который смог бы на пальцах объяснить возможно ли это сделать куда копать и смог бы ответит на возникающие вопросы касательно прошивки Esp на С, возможно не за бесплатно.
 

jcmvbkbc

New member

Sermus

New member
Теперь оно не дотягивается до символов libcirom примерно вот так:
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_string':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3732:(.text+0x3c5): dangerous relocation: call0: call target out of range: strlen
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_num':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3739:(.text+0x3ee): dangerous relocation: call0: call target out of range: sprintf
 

jcmvbkbc

New member
Теперь оно не дотягивается до символов libcirom примерно вот так:
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_string':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3732:(.text+0x3c5): dangerous relocation: call0: call target out of range: strlen
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_num':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3739:(.text+0x3ee): dangerous relocation: call0: call target out of range: sprintf
Действительно, есть проблема с сишными исходниками внутри libstdc++. Буду фиксить, спасибо.
 

Sermus

New member
А еще, чтобы заставить его линковаться (даже с символами libc в IRAM), нужно застабить кучу функций типа _write_r, _close_r, _open_r, _isatty, etc. Это я что-то не так делаю или их реально нужно застабить? Может тогда для lx106 их застабить прямо в newlib?
 

jcmvbkbc

New member
Теперь оно не дотягивается до символов libcirom примерно вот так:
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_string':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3732:(.text+0x3c5): dangerous relocation: call0: call target out of range: strlen
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libstdc++.a(cp-demangle.o): In function `d_append_num':
/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/libsupc++/cp-demangle.c:3739:(.text+0x3ee): dangerous relocation: call0: call target out of range: sprintf
Пофиксил в ветке xtensa-1.22.x: перенёс флаги из CT_CC_GCC_ENABLE_CXX_FLAGS в CT_TARGET_CFLAGS, и добавил два патча в patches/gcc/4.8.5. Должно работать как с gcc-4.8.x так и с gcc-5.x.
 

jcmvbkbc

New member
А еще, чтобы заставить его линковаться (даже с символами libc в IRAM), нужно застабить кучу функций типа _write_r, _close_r, _open_r, _isatty, etc. Это я что-то не так делаю или их реально нужно застабить? Может тогда для lx106 их застабить прямо в newlib?
Вроде в newlib есть какие-то реализации этих функций. Однако это какая-то ерунда, если их кто-то пытается вызывать. Подозреваю, что это может быть связано с terminate(), abort(), или чем-то похожим из обработки исключений.
У вас есть пример проекта в котором эти ошибки лезут?
 

Sermus

New member
У вас есть пример проекта в котором эти ошибки лезут?
Да, собственно, пытался вот такой helloworld собрать:
Код:
#include <string>
#include <sstream>
using namespace std;
extern "C" void user_init(void)
{
    stringstream ss;
    string str;
    str += "test";
    ss << str;
}

extern "C" void user_rf_pre_init(void)
{
}
Собирал с -fno-rtti -fno-exceptions, так что исключения, вроде, не должны были туда попасть.
 

jcmvbkbc

New member
Собирал с -fno-rtti -fno-exceptions, так что исключения, вроде, не должны были туда попасть.
Хм... Но stringstream и string сами могут захотеть кидать исключения, ведь libstdc++ собран без -fno-exceptions. Возможно стоит попробовать добавить -fno-exceptions в CT_CC_GCC_ENABLE_CXX_FLAGS?
 

Sermus

New member
Не очень понятно зачем механизму обработки исключений понадобились функции работы с файлами. В любом случае, эксперимент - критерий истины. Вы можете поставить такой эксперимент? Если он завершится удачно, надо будет думать над технической этикой запрета исключений прямо в stdc++.
 

Sermus

New member
Хм, а у меня почему-то нет. Все равно до этого мусора не дотягивается. Я пересобирал в рамках esp-open-sdk, при этом на crosstool-ng, есс-но, ссылался на xtensa-1.22.x. Проверил билд лог для crosstool-ng, действительно libstdc++ собирает с -fno-exceptions -fno-rtti.
[ALL ] x86_64-build_pc-linux-gnu-g++ -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp -I. -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/../include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/include -O2 -g -pipe -W -Wall -Wno-narrowing -Wwrite-strings -Wmissing-format-attribute -pedantic -Wno-long-long -fno-exceptions -fno-rtti -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp -I. -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/../include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/include -c -o charset.o -MT charset.o -MMD -MP -MF .deps/charset.Tpo /home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/charset.c

Но при компиляции
make
mkdir -p build/commons/driver
mkdir -p build/commons/utils
mkdir -p build/user
mkdir -p firmware
mkdir -p firmware/upgrade
xtensa-lx106-elf-g++ -Icommons/driver -Icommons/utils -Iuser -Icommons/driver/include -Icommons/utils/include -Iuser/include -Iinclude -Icommons/include -Icommons/include/driver -I../../espressif_3rdparty/ESP8266_SDK/../include -I../../espressif_3rdparty/ESP8266_SDK/include -I../../espressif_3rdparty/ESP8266_SDK/include/json -DFW_VERSION= -DFW_SERVERPORT= -DICACHE_FLASH -DICACHE_IRAM_ATTR='' -DICACHE_STORE_ATTR='__attribute__((aligned(4)))' -DFW_SETTINGS_STORE_ADDRESS= -DCA_CERTIFICATE_STORE_ADDRESS= -MMD -g -Os -fno-inline -Wpointer-arith -Wundef -Werror -Wl,-EL -mlongcalls -mtext-section-literals -D__ets__ -ffunction-sections -fdata-sections -Wno-write-strings -mno-serialize-volatile -fno-rtti -fno-exceptions -ansi -c user/user_main.cpp -o build/user/user_main.o
xtensa-lx106-elf-ar cru build/app_app.a build/user/user_main.o
xtensa-lx106-elf-gcc -L../../espressif_3rdparty/ESP8266_SDK/lib -T../../espressif_3rdparty/ld/eagle.app.v6.new.2048.app1.cpp.irom.ld -ansi -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--gc-sections -Wl,--start-group -lc -lgcc -lphy -lpp -lnet80211 -llwip -lwpa -lmain -lstdc++ build/app_app.a -Wl,--end-group -o build/app.out
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-abort.o):(.literal+0x0): undefined reference to `_exit'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-abort.o): In function `abort':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdlib/abort.c:63: undefined reference to `_exit'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-makebuf.o):(.literal+0x8): undefined reference to `_fstat_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-makebuf.o): In function `__smakebuf_r':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/makebuf.c:59: undefined reference to `_fstat_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-signal.o):(.literal+0x0): undefined reference to `_getpid_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-signal.o):(.literal+0x4): undefined reference to `_kill_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-signal.o): In function `_raise_r':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/signal/signal.c:162: undefined reference to `_getpid_r'
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/signal/signal.c:163: undefined reference to `_kill_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x0): undefined reference to `_read_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x4): undefined reference to `_lseek_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0x8): undefined reference to `_write_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o):(.literal+0xc): undefined reference to `_close_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): In function `__sread':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/stdio.c:48: undefined reference to `_read_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): In function `__swrite':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/stdio.c:89: undefined reference to `_lseek_r'
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/stdio.c:97: undefined reference to `_write_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): In function `__sseek':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/stdio.c:117: undefined reference to `_lseek_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-stdio.o): In function `__sclose':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/stdio/stdio.c:135: undefined reference to `_close_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-syswrite.o): In function `write':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/syscalls/syswrite.c:12: undefined reference to `_write_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(isatty.o): In function `_isatty_r':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/sys/xtensa/isatty.c:13: undefined reference to `_fstat_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-sysclose.o): In function `close':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/syscalls/sysclose.c:10: undefined reference to `_close_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-sysfstat.o): In function `fstat':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/syscalls/sysfstat.c:12: undefined reference to `_fstat_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-sysopen.o):(.literal+0x0): undefined reference to `_open_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-sysopen.o): In function `open':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/syscalls/sysopen.c:21: undefined reference to `_open_r'
/opt/lx106/bin/../lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/lib/libc.a(lib_a-sysread.o): In function `read':
/home/andrey/esp-open-sdk/crosstool-NG/.build/src/newlib-2.0.0/newlib/libc/syscalls/sysread.c:12: undefined reference to `_read_r'
collect2: error: ld returned 1 exit status
make: *** [build/app.out] Error 1

Все равно вываливает примерно те же ошибки.
 

jcmvbkbc

New member
Хм, а у меня почему-то нет. Все равно до этого мусора не дотягивается. Я пересобирал в рамках esp-open-sdk, при этом на crosstool-ng, есс-но, ссылался на xtensa-1.22.x. Проверил билд лог для crosstool-ng, действительно libstdc++ собирает с -fno-exceptions -fno-rtti.
[ALL ] x86_64-build_pc-linux-gnu-g++ -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp -I. -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/../include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/include -O2 -g -pipe -W -Wall -Wno-narrowing -Wwrite-strings -Wmissing-format-attribute -pedantic -Wno-long-long -fno-exceptions -fno-rtti -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp -I. -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/../include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/include -c -o charset.o -MT charset.o -MMD -MP -MF .deps/charset.Tpo /home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libcpp/charset.c
Это не xtensa libstdc++, это хостовый (компилируется x86_64-build_pc-linux-gnu-g++) libcpp.
 

Sermus

New member
Это не xtensa libstdc++, это хостовый (компилируется x86_64-build_pc-linux-gnu-g++) libcpp.
Да, Вы, конечно, правы, это не libstdc++, но я этот кусок билдлога привел только чтобы показать, что флаги передаются, прошу прощения, если ввел в заблуждение.
На всякий случай вот еще
[ALL ] /bin/bash ../../libtool --tag CXX --tag disable-shared --mode=compile /home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/./gcc/xgcc -shared-libgcc -B/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/./gcc -nostdinc++ -L/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/src -L/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/src/.libs -B/home/andrey/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/bin/ -B/home/andrey/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/lib/ -isystem /home/andrey/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/include -isystem /home/andrey/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sys-include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libstdc++-v3/../libgcc -I/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/include/xtensa-lx106-elf -I/home/andrey/esp-open-sdk/crosstool-NG/.build/xtensa-lx106-elf/build/build-cc-gcc-final/xtensa-lx106-elf/libstdc++-v3/include -I/home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -frandom-seed=hash_tr1.lo -mlongcalls -g -Os -fno-exceptions -fno-rtti -c -o hash_tr1.lo /home/andrey/esp-open-sdk/crosstool-NG/.build/src/gcc-4.8.5/libstdc++-v3/src/c++98/hash_tr1.cc

Этот уже показывает сборку libstdc++ кросс-компилятором.
 

jcmvbkbc

New member
я этот кусок билдлога привел только чтобы показать, что флаги передаются
Вообще-то туда они как раз не передаются. Но ОК, из второго лога видно что с xtensa libstdc++ всё в порядке.
Возможно имеет значение то, что в моём подопытном проекте куда я вставил ваш main есть такие стабы:
Код:
extern "C"
{
#include <osapi.h>
  void *pvPortMalloc( size_t xWantedSize );
  void vPortFree( void *pv );
  void *pvPortZalloc(size_t size);

}

void *operator new(size_t size)
{
  return os_malloc(size);
}

void *operator new[](size_t size)
{
  return os_malloc(size);
}

void operator delete(void * ptr)
{
  os_free(ptr);
}

void operator delete[](void * ptr)
{
  os_free(ptr);
}

extern "C" void __cxa_pure_virtual(void) __attribute__ ((__noreturn__));
extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__));
extern "C" void abort()
{
  while(true); // enter an infinite loop and get reset by the WDT
}

void __cxa_pure_virtual(void) {
  abort();
}

void __cxa_deleted_virtual(void) {
  abort();
}
 
Сверху Снизу