• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Alex_S

New member
где-то так:
c:\Espressif\xtensa-lx106-elf\bin>"xtensa-lx106-elf-g++.exe" -v
Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-g++.exe
COLLECT_LTO_WRAPPER=c:/espressif/xtensa-lx106-elf/bin/../libexec/gcc/xtensa-lx106-elf/4.8.2/lto-wrapper.exe
Target: xtensa-lx106-elf
Configured with: ../configure --prefix=/home/Mobyfab/xtensa/xtensa-lx106-elf --target=xtensa-lx106-elf --enable-multilib --disable-nls --disable-shared --disable-threads --with-gnu-as --with-gnu-ld --with-gmp=/home/Mobyfab/xtensa/build/gmp --with-mpfr=/home/Mobyfab/xtensa/build/mpfr --with-mpc=/home/Mobyfab/xtensa/build/mpc --enable-languages=c,c++ --with-newlib --disable-libsspThread model: single gcc version 4.8.2 (GCC)

П.с.: думаю, на "ты" будет проще. Если вы не против )
 

jcmvbkbc

New member
где-то так:
c:\Espressif\xtensa-lx106-elf\bin>"xtensa-lx106-elf-g++.exe" -v
Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-g++.exe
COLLECT_LTO_WRAPPER=c:/espressif/xtensa-lx106-elf/bin/../libexec/gcc/xtensa-lx106-elf/4.8.2/lto-wrapper.exe
Target: xtensa-lx106-elf
Configured with: ../configure --prefix=/home/Mobyfab/xtensa/xtensa-lx106-elf --target=xtensa-lx106-elf --enable-multilib --disable-nls --disable-shared --disable-threads --with-gnu-as --with-gnu-ld --with-gmp=/home/Mobyfab/xtensa/build/gmp --with-mpfr=/home/Mobyfab/xtensa/build/mpfr --with-mpc=/home/Mobyfab/xtensa/build/mpc --enable-languages=c,c++ --with-newlib --disable-libsspThread model: single gcc version 4.8.2 (GCC)
Cущественное отличие от моей конфигурации -- отсутствует ключ --disable-__cxa_atexit
@CHERTS есть ли этот ключ в твоих скриптах сборки? Если нет -- можешь добавить этот ключ в опции configure gcc?

П.с.: думаю, на "ты" будет проще. Если вы не против )
Да, конечно.
 

Alex_S

New member
Или не попробую, т.к., как я понял, через флаги компиляции я добавить его не могу?
 

anakod

Moderator
Команда форума
Пока у вас вылезает __dso_handle большого смысла разбираться со всем остальным нет. Что вам выводит xtensa-lx106-elf-g++ -v ?
Эту ошибку можно побороть так же, как не работающие конструкторы - просто добавить объявление в eagle.app. За правильность метода не поручусь но вроде бы работает как надо, в том числе локальные деструкторы у меня отрабатывают.

Прикладываю мою версию файла, в дальнейшем постараюсь собрать полноценный пример.
 

Вложения

jcmvbkbc

New member
Эту ошибку можно побороть так же, как не работающие конструкторы - просто добавить объявление в eagle.app.
Можно, а зачем? И зачем в eagle.app.ld? И почему в такое место? Можно просто глобальную переменную такую завести, void *__dso_handle = 0; тоже должно работать.

За правильность метода не поручусь но вроде бы работает как надо, в том числе локальные деструкторы у меня отрабатывают.
Что такое "локальные деструкторы"? Деструкторы объектов на стеке? Но они и так работают.
__dso_handle нужна __cxa_atexit, которая нужна для выполнения кода после завершения main. У нас же он никогда не завершается.
Надо просто компилятор собрать с --disable-__cxa_atexit. Fabien Poussin даже скрипт свой обновил по такому случаю :)
 

anakod

Moderator
Команда форума
Просто объявление переменной не помогло, а вариант с eagle работает.
Со второй частью согласен, но т.к. не силен в сборках компиляторов (Я Win разработчик и далек от мира GCC), мой вариант мне кажется хорошим промежуточным костылем чтобы пока все работало :)
 

anakod

Moderator
Команда форума
Еще из ограничений касательно C++, с которыми я столкнулся, - не работает std::string, причем только часть функций (например присваивание сишной строки).
Честно говоря не знаю нужен ли он мне, но было бы интересно узнать причину и/или устранить ее:

std::string x = "W";

Код:
undefined reference to `std::string::_Rep::_S_empty_rep_storage'
undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
undefined reference to `std::string::_Rep::_M_destroy(std::allocator<char> const&)'
и т.д.

Предполагаю что не хватает какой-то линковки но пока не вникал в данный вопрос.
 

anakod

Moderator
Команда форума
Ее еще не собирали под ESP? В дистрибутиве вижу только H-ник. Вообще, конечно, было бы очень хорошо иметь все в одном комплекте со всеми нужными патчами, чтобы не собирать по кусочкам с интернета. Unofficial Development Kit в этом плане прекрасен, жаль пока еще с C++ не дружит.
 

jcmvbkbc

New member
Ее еще не собирали под ESP? В дистрибутиве вижу только H-ник.
Да, похоже виндовые скрипты её не собирают.
Вообще, конечно, было бы очень хорошо иметь все в одном комплекте
Её можно построить в процессе финальной сборки gcc, цели make называются all-target-libstdc++-v3 и install-target-libstdc++-v3
 

anakod

Moderator
Команда форума
Тут еще важный вопрос по памяти (как кода так и оперативки). Да и вообще нужна ли вся стандартная библиотека на маленькой железячке.
С другой стороны, т.к. вектор работает было бы интересно понимать что функционирует а что нет.
 

CHERTS

Moderator
Команда форума
Cущественное отличие от моей конфигурации -- отсутствует ключ --disable-__cxa_atexit
@CHERTS есть ли этот ключ в твоих скриптах сборки? Если нет -- можешь добавить этот ключ в опции configure gcc?
Да, конечно.
У меня такие ключи сборки, могу добавить и другие, только скажите какие правильнее

C:\Espressif\xtensa-lx106-elf\bin>xtensa-lx106-elf-g++.exe -v
Using built-in specs.
COLLECT_GCC=C:\Espressif\xtensa-lx106-elf\bin\xtensa-lx106-elf-g++.exe
COLLECT_LTO_WRAPPER=c:/espressif/xtensa-lx106-elf/bin/../libexec/gcc/xtensa-lx106-elf/4.8.2/lto-wrapper.exe
Target: xtensa-lx106-elf
Configured with: ../configure --prefix=/d/Neo/ESP/xtensa-lx106-elf --target=xtensa-lx106-elf --enable-multilib --disable-nls --disable-shared --disable-threads --with-gnu-as --with-gnu-l
d --with-gmp=/d/Neo/ESP/build/gmp --with-mpfr=/d/Neo/ESP/build/mpfr --with-mpc=/d/Neo/ESP/build/mpc --enable-languages=c,c++ --with-newlib --disable-libssp
Thread model: single
gcc version 4.8.2 (GCC)
 

jcmvbkbc

New member
У меня такие ключи сборки, могу добавить и другие, только скажите какие правильнее
Как минимум --disable-__cxa_atexit в configure обеих стадий gcc.
По части libstdc++ я не понял, она строится/устанавливается или нет? В скрипте на который я смотрю финальный компилятор собирается просто make/make install.
При сборке crosstool-NG там списки целей: make all-gcc all-target-libgcc all-target-libstdc++-v3 для сборки и make install-gcc install-target-libgcc install-target-libstdc++-v3 для установки.
 

CHERTS

Moderator
Команда форума
Как минимум --disable-__cxa_atexit в configure обеих стадий gcc.
По части libstdc++ я не понял, она строится/устанавливается или нет? В скрипте на который я смотрю финальный компилятор собирается просто make/make install.
При сборке crosstool-NG там списки целей: make all-gcc all-target-libgcc all-target-libstdc++-v3 для сборки и make install-gcc install-target-libgcc install-target-libstdc++-v3 для установки.
У меня после сборки в C:\Espressif\xtensa-lx106-elf\xtensa-lx106-elf\lib\ присутствуют
crt0.o
libc.a
libg.a
libhal.a
libm.a
libstdc++.a
libstdc++.a-gdb.py
libstdc++.la
libsupc++.a
libsupc++.la
 

CHERTS

Moderator
Команда форума
Попробовал собрать пример hello_world_cpp из поста Alex_S, все ОК
Сейчас пересоберу компилятор с --disable-__cxa_atexit и можно его добавлять в DevKit
Нужно только подправить eagle.app.v6.ld, вернее корректнее будет сделать отдельный eagle.app.v6.ld для cpp, а оригинальные не трогать.

Кидайте больше примеров на с++ для тестирования.
 
Сверху Снизу