Keil在C++环境下添加C文件的BUG(Undefined symbol )

今天在改动keil一个C++环境的工程的时候,添加了一个c文件。并在main函数中调用该C文件的函数。
报错如下在这里插入图片描述

.\Objects\osdk_stm32.axf: Error: L6218E: Undefined symbol cm_backtrace_init(const char*, const char*, const char*) (referred from main.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.

正常遇到Undefined symbol ,一般的错误原因基本上如下

  1. c文件中未定义
  2. 未在工程中添加该c文件

所以,大概意思就是c文件中的函数有问题。可是研究半天,发现并不是这样。
遂想到了这个是c++环境的工程,可能与环境有关,但如果直接添加c环境,c++的文件全部报错。于是查找了Keil中C和C++混合编程方法。方法如下

  1. 新建的C++文件名为xx.cpp和xx.h。

  2. 以前的C文件xx2.c可以右击文件,属性改为C++ Source file。在xx2.h中修改为

    #ifndef XX_H

    #define XX_H

    #ifdef __cplusplus extern “C” {
    #endif

    #ifdef __cplusplus }
    #endif

    #endif

  3. 再有C文件需要调用xx2.c文件中的程序时直接添加xx2.h头文件,调用函数即可,无需修改文件属性。

按照这个方法,修改了 .h文件,完美解决。

".\Objects\osdk_stm32.axf" - 0 Error(s), 0 Warning(s).

你可能感兴趣的:(BUG日记,bug)