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

标签 c++ eclipse linker freertos

工具链是 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/

相关文章:

C++ volatile : guaranteed 32-bit accesses?

c++ - 为什么删除析构函数除了普通析构函数还要占用第二个vtable槽?

c++ - 避免获取子字符串?

c++ - 有条件使用声明

c++ - 有关扩展类(class)能力的最佳方法的建议

Hoogle 的 EclipseFP 问题

Windows 7 的 Eclipse 中运行 Android 项目需要 JAVA

java - Android 应用程序 Activity

Visual Studio 2010 x64 上的 C++ 链接错误

c - 如何声明一个占用内存段中所有可用空间的 C 数组?