今天在改动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 ,一般的错误原因基本上如下
- c文件中未定义
- 未在工程中添加该c文件
所以,大概意思就是c文件中的函数有问题。可是研究半天,发现并不是这样。
遂想到了这个是c++环境的工程,可能与环境有关,但如果直接添加c环境,c++的文件全部报错。于是查找了Keil中C和C++混合编程方法。方法如下
-
新建的C++文件名为xx.cpp和xx.h。
-
以前的C文件xx2.c可以右击文件,属性改为C++ Source file。在xx2.h中修改为
#ifndef XX_H
#define XX_H
#ifdef __cplusplus extern “C” {
#endif…
#ifdef __cplusplus }
#endif#endif
-
再有C文件需要调用xx2.c文件中的程序时直接添加xx2.h头文件,调用函数即可,无需修改文件属性。
按照这个方法,修改了 .h文件,完美解决。
".\Objects\osdk_stm32.axf" - 0 Error(s), 0 Warning(s).