• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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, а оригинальные не трогать.

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