stm32 — Atollic TrueSTUDIO: как конфертировать из C в C ++?

Я пытаюсь преобразовать свой проект в C ++ в TrueSTUDIO для STM32

  • Выбор проекта (на вкладке Проекты C / C ++)
  • Правой кнопкой мыши выберите New / Other
  • На вкладке C / C ++ конвертировать в проект C / C ++ (добавляет C / C ++ Nature)
  • При нажатии Next ничего не происходит (непонятно почему)
  • Когда я снова нажимаю Next, я вижу: Преобразовать в проект C / C ++: мастера добавляют C / C ++ Nature в выбранные проекты, чтобы включить для них поддержку инструментов C / C ++.
  • Я нажимаю Готово

Когда ничего не происходит, когда я меняю main.c на main.cpp, я получаю следующую ошибку после сборки:

startup\startup_stm32f407xx.o: In function `LoopFillZerobss':
C:\Users\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s:115: undefined reference to `main'
collect2.exe: error: ld returned 1 exit status

Кажется, все еще используется C (также в командной строке (первая часть):

arm-atollic-eabi-gcc -o Fcb1010.elf Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.o Drivers\STM ...

Я ожидаю, что будет использоваться g ++.

Как изменить мои настройки / процедуры, чтобы иметь возможность использовать C ++ в TrueSTUDIO для проекта, созданного CubeMX?

ОБНОВИТЬ

Я удалил Atollic TrueStudio, удалил AC6 System Workbench и переустановил AC6 System Workbench. Теперь я могу использовать C ++ в AC6 System Workbench, даже используя STL.

Я не осмелюсь снова установить Atollic TrueStudio, поскольку он нарушает существующую установку AC6 SystemWorkbench, вероятно, потому, что они оба используют Eclipse. Жаль, поскольку мне понравились некоторые функции TrueStudio, но C ++ для меня важнее. Так что для меня больше нет TrueStudio.

10

Решение

Ошибка, которую вы упоминаете

startup \ startup_stm32f407xx.o: в функции ‘LoopFillZerobss’:
C: \ Users \ Michel \ OneDrive \ Stm32 \ Stm32CubeProjects \ Fcb1010 \ Debug / .. \ startup / startup_stm32f407xx.s: 115: неопределенная ссылка на `main ‘
collect2.exe: ошибка: ld вернул 1 состояние выхода

Есть проблема с компоновщиком, я подозреваю, что библиотека ищет главную функцию c. Компилятор C ++ выполняет искажение имени, поэтому символ больше не будет main,

Попробуйте изменить подпись вашего main в extern "C" int main(void)

3

Другие решения

Пожалуйста, следуйте ниже шагов: —

  1. Лучше конвертировать все .c файл в .cpp вручную
  2. Проверьте каждый заголовочный файл и измените макрос, специфичный для языка Си
  3. измените основную функцию с типа C на C ++ (void main на int main ()) и верните значение из вашей главной функции.
  4. Если вы используете make file, проверьте, указаны ли конкретные зависимости C, и измените их.

Надеюсь, это поможет.

1

По вопросам рекламы [email protected]