Не удалось скомпилировать библиотеки 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
Что еще я должен установить?
@S.E.K., 👍1
1 ответ
Лучший ответ:
Ардуино на основе 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 Кбайт.
- C++ против языка Arduino?
- Ошибка: expected unqualified-id before 'if'
- ошибка: ожидаемое первичное выражение перед токеном ','
- Ввести идентификатор чипа ESP32 в строковую переменную (новичок в Arduino/C++)
- Передача функции-члена класса в качестве аргумента
- Улучшенное циклическое переключение цветов RGB.
- Какие есть другие IDE для Arduino?
- Несовместимые типы при назначении «uint8_t {aka unsigned char}» на «uint8_t [1] {aka unsigned char [1]}»
Спасибо за ответ. Не могли бы вы показать мне способ использования std::array в arduino (у меня возникли проблемы #including<array>), @S.E.K.