最近学习嵌入式开发,因项目框架较大,部分内容改动,在将别人单独写的串口读取数据源码添加到工程中后,编译出现以下问题:
通过查询资料,都是在说未定义引下的错误。
回头检查项目,源文件加入到工程,头文件也已包含。而后多次尝试编译,未果;关闭重启,亦未果。。。
询求正点原子技术支持,远程协助,还是未能解决。。。
编译通不过,调试无法进行,苦恼一天。。。。
后来,多次将源文件多项目中删除后重新添加,无意间发现,项目中的源文件既有*.c,也有*.cpp,也就是说有的是用C语言写的,有的是用C++写的程序。于是乎,上网查了下在keil中两种语言的使用区别,发现keil工程同时有c文件和CPP文件时,c文件的函数在cpp文件中是无法直接访问的。
也就是说,正常的include“”xxx.h“”那肯定是不行的,编译会提示说未定义错误。原来如此!!!我的工程是C++文件调用C文件中的函数,所以即使源文件添加了,也出现未定义错误。根据网上提供的解决方法,将
#include "XXX.h" 改为
extern "C"
{
#include "XXX.h"
}
然后再编译, 0 Error(s), 0 Warning(s). OK !!
总结:
1.一般情况下,Error: L6218E: Undefined symbol 若是由于未定义引起的错误,可以根据错误提示定位到相应的问题行,然后将相应的函数进行定义即可,网上大多也都是针对这种情况下的未定义错误进行解答;
2.若工程中已经添加了源文件,也包含了相应的头文件,依然出现错误 Error: L6218E: Undefined symbol ,则检查是否是由于在Keil中混用C和c++引起的。
---------------------
作者:zhizw
来源:CSDN
原文:https://blog.csdn.net/zhizuwei/article/details/86017618
版权声明:本文为博主原创文章,转载请附上博文链接!