Eclipse не распознает типы из stdint.h для ARM Windows GCC toolchain
у меня есть Eclipse Juno для разработчиков C / C++, установленных вместе с GNU ARM C/C++ Development Support plug-in от http://sourceforge.net/projects/gnuarmeclipse.
в моем проекте я использую такие типы, как uint_32t
, int16_t
и uint8_t
чем обычно происходит от stdint.h
. В то время как я заставил Eclipse видеть стандартные заголовки моего компилятора, напрямую указав каталог, где include
каталог лежит, упомянутые типы не разрешены. Это дает мне много красных отметок о неразрешенных символах и некоторые проблемы с завершением кода функций, объявленных с этими типами.
та же проблема связана со стандартными определениями макросов, такими как GNUC - обычно CDT видит их для GNU C или GNU C++, но с toolchain, установленной для ARM Windows GCC, это не так. Странно.
что я могу сделать, чтобы решить эту проблему и вернуть основной импульс, который дает Eclipse в производительности?
6 ответов
Я думаю, что нашел решение своей проблемы. Проблема была в настройки компилятора CDT GCC Builtin провайдер, который пытался запустить gcc
вместо arm-elf-gcc
. Я добавил префикс в поле Command to get compiler specs:
1 для вызова компилятора своим именем.
и вуаля, все неразрешенные символы исчезли.
к сожалению, я сломал свой проект, изменив toolchains (никогда не делайте этого, если у вас установлен плагин GNU ARM Eclipse!) но это другое история.
1 - это здесь: Project Properties > C/C++ General > Preprocessor Include Paths, Macros etc.
на вкладке Providers
; Share settings entries between projects (global provider)
должно быть отключено для редактирования этого поля.
обратите внимание:GNU ARM Eclipse плагины были обновлены в октябре 2013 года, и новая версия имеет лучшую поддержку обнаружения пути, поэтому эта проблема менее вероятна.
изменение цепочек инструментов также было исправлено.
Если вы используете внешний Makefile, Eclipse не может знать, где находится ваша стандартная библиотека для целевой платформы. Решение, которое я нашел, заключается в добавлении библиотеки include пути к
Project->Preferences->C++ General->Paths and symbols
.
у меня была та же проблема и решение от на этой странице помог решить его:
- введите свойства проекта - > C / C++ - >препроцессор включает пути и т. д.- >Провайдеры
- нажмите на CDT GCC Build Output Parser и измените шаблон команды компилятора с
(gcc)|([gc]++)|(clang)
до(arm-none-eabi-gcc)|([gc]++)|(clang)
- Нажмите кнопку Применить
- нажмите на CDT встроенные настройки компилятора Cross ARM и замените
${COMMAND}
Сarm-none-eabi-gcc
. - Нажмите кнопку "Применить" кнопка.
на Project > Properties > C/C++ General > Preprocessor Include Paths > Providers
:
включить
CDT GCC Built-in Compiler Settings Cross ARM
.-
Set
Command to get compiler specs
в:arm-none-eabi-g++ ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}".C
- важная часть -
.C
на конце. Это обычно устанавливается в зависимости от языка. Маленький.c
используется для кода C, в то время как большой C используется для C++. Но нет языков, указанных при использовании внешнего файла makefile или сno toolchain
установить вариант.
- важная часть -
кроме того, проверьте
Allocate console in the Console View
для проверки правильности выполнения команды и правильной замены переменных.включить
CDT GCC Build Output Parser
и измените шаблон команды компилятора с(gcc)|([gc]\+\+)|(clang)
to(.*g++)|(.*gcc)|(.*[gc]\+\+)
затем применить изменения. ИспользуйтеMove up/down
кнопки для перемещения его надCDT GCC Built-in Compiler Settings Cross ARM
.
Вам также нужно будет установить Project > Properties > C/C++ General > Preprocessor Include Paths > Entries > CDT User Settings Entries
следующим образом:
на Preferences > String Substitutions
вам нужно будет создать ВАР gnu-arm-path
указывая на ваш дом toolchain.
в идеале, они должны быть найдены в CDT GCC Built-in Compiler Settings Cross ARM
, но в моем случае их нет. Я думаю, это связано с тем, что в управляемом проекте эти записи привязаны к каждому языку. Но с внешним makefile поле списка языков просто говорит [Unspecified]
.
система поставщика сканера Eclipse, похоже, разработана вокруг управляемых проектов CDT, что делает ее немного сложнее работать, когда вы использование внешнего файла makefile.
вы можете создать новый управляемый проект с внешним makefile и просмотреть консоль обнаружения сканера, чтобы увидеть, как он должен работать. Вот что я сделал.
Я столкнулся с совершенно другим решением моей версии этой (в) известной проблемы. В моем случае поиск путей, где не проблема, потому что компилятор работал нормально. Тем не менее, редактор жаловался на неразрешенные типы cstdint везде: очень раздражает. Поиск решения с использованием строки сообщения об ошибке не был плодотворным и очень разочаровывающим.
Я нашел решение этой проблемы случайно в ответе ("теперь есть новый способ решить это без Gxx_experimental hack") в следующий поток:
Eclipse CDT C++11/C++0x поддержка
Ура