9

我尝试在 TrueSTUDIO for STM32 中将我的项目转换为 C++

  • 选择项目(在 C/C++ 项目选项卡中)
  • 鼠标右键,选择新建/其他
  • 在 C/C++ 选项卡中,转换为 C/C++ 项目(添加 C/C++ 性质)
  • 按 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++。

如何更改我的设置/程序以便能够在 TrueSTUDIO 中为 CubeMX 生成的项目使用 C++?

更新

我删除了 Atollic TrueStudio,删除了 AC6 System Workbench,然后重新安装了 AC6 System Workbench。现在我可以在 AC6 System Workbench 上使用 C++,甚至使用 STL。

我不敢再安装 Atollic TrueStudio,因为它破坏了 AC6 SystemWorkbench 的现有安装,可能是因为它们都使用 Eclipse。很遗憾,因为我喜欢 TrueStudio 的一些特性,但 C++ 对我来说更重要。所以对我来说,不再有 TrueStudio。

4

2 回答 2

2

你提到的错误

startup\startup_stm32f407xx.o:在函数“LoopF​​illZerobss”中:C:\Users\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s:115:未定义对“main”collect2.exe 的引用:错误:ld 返回 1 个退出状态

是链接器问题,我怀疑库正在寻找 ac main 函数。C++ 编译器执行名称修改,因此符号将不再是main.

尝试将您的签名更改mainextern "C" int main(void)

于 2018-03-26T10:43:01.877 回答
1

请按照以下步骤操作:-

  1. 最好将所有 .c 文件手动转换为 .cpp
  2. 检查每个头文件并更改特定于 C 语言的宏
  3. 将主函数从 C 类型更改为 C++(void main 到 int main())也从主函数返回一个值。
  4. 如果您使用的是 make 文件,请检查是否引用了特定的 C 依赖项并更改它们。

希望这会有所帮助。

于 2018-04-01T11:22:47.063 回答