C++ 手动立方体C到C++;包含FreeRTOS时项目转换失败

C++ 手动立方体C到C++;包含FreeRTOS时项目转换失败,c++,eclipse,linker,freertos,C++,Eclipse,Linker,Freertos,工具链是SW4STM32,gcc,处理器是STM32F303K8(核仁303K8),最小的测试项目,根本没有实际的用户代码。 如何转换ST CubeMX生成的项目的过程有很好的文档记录,而且显然是有效的。但是,当我在多维数据集中指定FreeRTOS时,链接器无法找到init函数MX_FreeRTOS_init()。函数原型包含在main.cpp中,定义存在于另一个源文件(freertos.c)中。这在C中工作,但是当将项目转换为C++时,链接器无法链接函数。 我做的C2C++转换如下: 将cc

工具链是SW4STM32,gcc,处理器是STM32F303K8(核仁303K8),最小的测试项目,根本没有实际的用户代码。 如何转换ST CubeMX生成的项目的过程有很好的文档记录,而且显然是有效的。但是,当我在多维数据集中指定FreeRTOS时,链接器无法找到init函数MX_FreeRTOS_init()。函数原型包含在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\u FREERTOS\u Init()”的引用

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


有什么建议吗?或者我必须跳过在多维数据集中指定FreeRTOS而全部手动完成吗?

我也面临同样的问题。
因此,我建议将freertos.c文件重命名为freertos.cpp

我也遇到了同样的问题。
因此,我建议将freertos.c文件重命名为freertos.cpp

我对使用Atolic for stm32有同样的问题 通过在main.cpp中添加外部“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 */

我对stm32使用Atolic也有同样的问题 通过在main.cpp中添加外部“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++的RTOS,例如免费的DRORTOS。(谷歌IT)

< P>我建议C++的RTOS,例如自由DRORTOS。(谷歌it)