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.

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам