Используете std :: tuple с arm-none-eabi-gcc в автономном (голом железном) проекте?

Насколько я понимаю, std::pair и std::tuple в основном представляют собой конструкции времени компиляции, которые не требуют какой-либо конкретной поддержки времени выполнения и могут быть реализованы (если это беспорядочно) исключительно с использованием шаблонных конструкций.

Так почему же, когда я #include <tuple> в своем голом металлическом проекте из стандартной библиотеки arm-none-eabi C ++, он включает <array>, который включает <stdexcept>, который, наконец, включает <string>, что делает невозможным для меня его включение, поскольку оно затем попадает в заголовки, такие как wchar.h и bits/postypes.h, которые не не входит в arm-none-eabi-gcc? Что я делаю неправильно?

Я прекрасно могу использовать std::pair из <utility>, но std::tuple просто не будет работать, если я не отредактирую заголовки стандартной библиотеки C ++, чтобы удалить некорректное включение, что явно неприемлемо.

Является ли это упущением или ограничением, которое эффективно предотвращает использование программ на голом железе совершенно законных частей STL, или я должен делать здесь что-то еще? Нужно ли мне предоставлять свои собственные wchar.h и другие заголовки ??

Я был бы очень признателен за объяснение того, чего здесь ждут авторы этих заголовков.


person Thomas    schedule 27.10.2017    source источник
comment
Существует множество сторонних вариантов STL, некоторые из которых нацелены на конкретный вариант использования, с которым вы сталкиваетесь (google для встроенного stl или что-то в этом роде). Вариант STL в комплекте с GCC одинаков для всех сборок и в первую очередь ориентирован на обычные многопроцессорные приложения на базе ОС.   -  person oakad    schedule 27.10.2017


Ответы (1)


Предполагая, что вы хотите скомпилировать для Cortex-M, используйте собственный дистрибутив GCC для ARM, ранее называвшийся GCC-ARM-Embedded. Кортеж там отлично работает.

Кстати, кортеж никогда не был частью STL. Вероятно, вы хотели сказать Стандартная библиотека C ++.

person Erlkoenig    schedule 27.10.2017
comment
Хорошо, это проясняет, я посмотрел немного дальше после того, как вы указали мне тот же дистрибутив, который я использовал, и заметил, что в моей версии все стандартные заголовки C, такие как wchar.h, отсутствовали. Затем я обнаружил, что Archlinux упаковывает newlib отдельно (как arm-none-eabi-gcc и arm-none-eabi-newlib соответственно). Теперь это работает. Спасибо!! - person Thomas; 27.10.2017