Atollic TrueSTUDIO:如何从 C 转换为 C++?
Atollic TrueSTUDIO: How to convert from C to C++?
我尝试通过
在 TrueSTUDIO for STM32 中将我的项目转换为 C++
- 选择项目(在 C/C++ 项目选项卡中)
- 鼠标右键,select New/Other
- 在 C/C++ 选项卡中,转换为 C/C++ 项目(添加 C/C++ 自然)
- 按“下一步”时,没有任何反应(原因不明)
- 当我再次按“下一步”时,我看到:转换为 C/C++ 项目:向导将 C/C++ Nature 添加到 selected 项目以启用 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++。
如何更改我的 settings/procedure 以便能够在 TrueSTUDIO 中为 CubeMX 生成的项目使用 C++?
更新
我删除了 Atollic TrueStudio,删除了 AC6 系统 Workbench,然后重新安装了 AC6 系统 Workbench。现在我可以在 AC6 系统中使用 C++ Workbench,甚至可以使用 STL。
我不敢再安装Atollic TrueStudio,因为它破坏了现有的AC6系统安装Workbench,可能是因为它们都使用Eclipse。很遗憾,因为我喜欢 TrueStudio 的一些功能,但 C++ 对我来说更重要。所以对我来说,不再使用 TrueStudio。
您提到的错误
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 main函数。 C++ 编译器执行名称修改,因此符号将不再是 main
.
尝试将 main
的签名更改为 extern "C" int main(void)
请按照以下步骤操作:-
- 最好手动将所有 .c 文件转换为 .cpp
- 检查各个头文件,修改C语言特有的宏
- 将主函数从 C 类型更改为 C++(将 void main 更改为 int main())还有 return 来自主函数的值。
- 如果您使用的是 make 文件,请检查是否引用了特定的 C 依赖项并进行更改。
希望这会有所帮助。
我尝试通过
在 TrueSTUDIO for STM32 中将我的项目转换为 C++- 选择项目(在 C/C++ 项目选项卡中)
- 鼠标右键,select New/Other
- 在 C/C++ 选项卡中,转换为 C/C++ 项目(添加 C/C++ 自然)
- 按“下一步”时,没有任何反应(原因不明)
- 当我再次按“下一步”时,我看到:转换为 C/C++ 项目:向导将 C/C++ Nature 添加到 selected 项目以启用 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++。
如何更改我的 settings/procedure 以便能够在 TrueSTUDIO 中为 CubeMX 生成的项目使用 C++?
更新
我删除了 Atollic TrueStudio,删除了 AC6 系统 Workbench,然后重新安装了 AC6 系统 Workbench。现在我可以在 AC6 系统中使用 C++ Workbench,甚至可以使用 STL。
我不敢再安装Atollic TrueStudio,因为它破坏了现有的AC6系统安装Workbench,可能是因为它们都使用Eclipse。很遗憾,因为我喜欢 TrueStudio 的一些功能,但 C++ 对我来说更重要。所以对我来说,不再使用 TrueStudio。
您提到的错误
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 main函数。 C++ 编译器执行名称修改,因此符号将不再是 main
.
尝试将 main
的签名更改为 extern "C" int main(void)
请按照以下步骤操作:-
- 最好手动将所有 .c 文件转换为 .cpp
- 检查各个头文件,修改C语言特有的宏
- 将主函数从 C 类型更改为 C++(将 void main 更改为 int main())还有 return 来自主函数的值。
- 如果您使用的是 make 文件,请检查是否引用了特定的 C 依赖项并进行更改。
希望这会有所帮助。