gpt4 book ai didi

c++ - 包含 FreeRTOS 时,手动 CubeMX C 到 C++ 项目的转换失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:24 28 4
gpt4 key购买 nike

工具链是 SW4STM32,gcc,处理器是 STM32F303K8 (Nucleo 303K8),最小的测试项目,根本没有实际的用户代码。如何转换由 ST CubeMX 生成的项目的过程有详细记录并且显然有效。但是,当我在 Cube 中指定 FreeRTOS 时,链接器无法找到初始化函数 MX_FREERTOS_Init()。函数原型(prototype)包含在 main.cpp 中,定义存在于另一个源文件 (freertos.c) 中。这在 C 中有效,但在将项目转换为 C++ 时,链接器无法链接该函数。

我做的C2C++转换如下:

  • 将ccnature 添加到.project 文件
  • 将 main.c 复制到 main.cpp(并从构建中删除 main.c)
  • 在项目属性中将 gcc 编译器设置复制到 g++
  • 将链接描述文件指向项目目录中的链接描述文件

以上内容使 Eclipse 能够使用 g++ 编译 main 并使用 G++ 链接器进行链接。然而,在 ...\Debug/../Src/main.cpp:97 中链接始终失败:对 `MX_FREERTOS_Init()' 的 undefined reference

值得注意的是,即使我从 main.cpp 中删除了所有对 MX_FREERTOS_Init() 的引用,以至于文本根本不存在于任何地方,链接器仍然会完全失败。即使文本完全不同,它甚至会报告相同的行号。如果我清理项目、重建和刷新所有索引等等,这种行为不会改变也没关系。

任何人有什么建议吗?还是我必须跳过在 Cube 中指定 FreeRTOS 而全部手动完成?

最佳答案

我对stm32使用atollic有同样的疑问,通过在 main.cpp 中添加 extern "C"解决

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config();
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
#ifdef __cplusplus
}
#endif
/* USER CODE END PFP */

关于c++ - 包含 FreeRTOS 时,手动 CubeMX C 到 C++ 项目的转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42665322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com