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)
Пожалуйста, следуйте ниже шагов:-
- Лучше конвертировать все.c файл в.cpp вручную
- Проверьте каждый заголовочный файл и измените макрос, специфичный для языка Си
- измените основную функцию с типа C на C++ (void main на int main()) и верните значение из вашей главной функции.
- Если вы используете make file, проверьте, указаны ли конкретные зависимости C, и измените их.
Надеюсь, это поможет.