Не удалось скомпилировать библиотеки c++11, несмотря на добавление-std=c++11 в platform.txt

Я хочу использовать структуры данных c++, такие как векторы, массивы, карты... в моем скетче Arduino. Я позаботился о том, чтобы добавить-std=c++11 и -std=gnu++11 в platform.txt, Я все еще получаю следующее сообщение об ошибке:

фатальная ошибка: unordered_map: Нет такого файла или каталога #include <unordered_map> компиляция завершена. выход из состояния 1 unordered_map: Нет такого файла или каталога

Вот снимок из ~/arduino-nightly/hardware/arduino/avr/platform.txt:

Версии:

  • Arduino ide: 1.8.14
  • g++: 5.4.0
  • avr-g++: 4.9.2

Что еще я должен установить?

, 👍1


1 ответ


Лучший ответ:

3

Ардуино на основе AVR не имеют ничего близкого к полной реализации стандартной библиотеки C++. У них есть avr-libc , который достаточно полон, по крайней мере, стандарта C99, то есть стандарта C 1999 года, а не C++. То, что вы делаете с-std=c++11, влияет на стандарт, используемый компилятором для интерпретации самого языка C++. Это прекрасно работает на AVR на основе ардуино, но не даст вам тот тип контейнеров C++, который вы можете использовать на настольном компьютере или более крупной встроенной системе, как ESP8266.

Большая часть стандартной библиотеки C++ была бы полностью неуместна в Arduino на основе AVR, особенно те части, которые используют динамическое выделение, например unordered_map в вашем сообщении об ошибке.

Есть некоторые части библиотеки C++, реализованные через Arduino STL. Следует ли вам использовать контейнеры из него-это другой вопрос.

Если вы все-таки попытаетесь использовать Arduino STL, я бы посоветовал вам использовать более консервативные его части. Что-то вроде unordered_map, но с меньшим (или вообще без) динамическим распределением, может быть реализовано с помощью Arduino STL std::array и функций из его заголовка <algorithm><algorithm>, таких как std::find или std::lower_boundи т. Д. Попытка использовать карту C++, векторный контейнер или что-то в этом роде-это своего рода напрашивание на неприятности, особенно на более распространенные ардуино на базе AVR с объемом оперативной памяти всего около 2 Кбайт.

,

Спасибо за ответ. Не могли бы вы показать мне способ использования std::array в arduino (у меня возникли проблемы #including<array>), @S.E.K.