Atollic TrueSTUDIO:如何从 C 转换为 C++?
Posted
技术标签:
【中文标题】Atollic TrueSTUDIO:如何从 C 转换为 C++?【英文标题】:Atollic TrueSTUDIO: How to convert from C to C++? 【发布时间】:2018-09-02 16:37:52 【问题描述】:我尝试在 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。
【问题讨论】:
【参考方案1】:你提到的错误
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)
【讨论】:
我试过了,没有任何改变,但是,似乎没有考虑到整个文件。我仍在检查如何解决此问题。所以我不得不推迟接受,直到我确定问题会得到解决。 我继续解决这个问题,但我无法让它工作,似乎仍然没有考虑cpp文件。 是正在编译的cpp文件。在其顶部添加#error "testing"
即可查看。
我故意在 cpp 文件中出错,编译器错过了文件中的编译,因为链接器给出了同样的错误。希望重新安装(整个 Eclipse 环境)可以正常工作。
我把赏金给了你,虽然它没有解决问题。我会相应地更新我的问题。【参考方案2】:
请按照以下步骤操作:-
-
最好将所有 .c 文件手动转换为 .cpp
检查每个头文件并更改特定于 C 语言的宏
将主函数从 C 类型更改为 C++(void main 更改为 int main())也会从主函数返回一个值。
如果您使用的是 make 文件,请检查是否引用了特定的 C 依赖项并更改它们。
希望这会有所帮助。
【讨论】:
我在较早的阶段就已经这样做了,但没有帮助。未使用 makefile(或至少不可见)。以上是关于Atollic TrueSTUDIO:如何从 C 转换为 C++?的主要内容,如果未能解决你的问题,请参考以下文章
关于atollic truestudio for stm32
Truestudio atollic(基于 Eclipse 的 IDE)创建空的二进制文件,尽管不是空的 elf 文件和大量代码