这不是一个真正的问题,因为这个问题已经解决了。但我想在这里分享一下,因为有人可能会遇到同样的问题。我希望能得到更深刻的解释。
我正在使用Keilμvision3 3在μ上编程(我认为这与这个问题无关)。在我的main.c中,我有如下内容:
... // accessible code
getInput();
... // not accessible after modification在mobile.c(ignore头中,包含与之无关的blablabla ):
void getInput()
{
...
}一切都很好。但是,在我对代码做了一些修改之后,
void getInput(struct SomeStruct *ss)
{
...
}编译和下载到芯片完成,没有任何错误。尽管我确实发现了一个警告:
*警告L2:引用未解决的外部 符号: GETINPUT
但我有点懒,我的同事还有很多其他的警告,使我无法阅读。(坏习惯!)
我想学的是:
发布于 2016-04-22 10:59:17
在C中,如果使用未在头文件中声明的函数,编译器将猜测定义(并取决于编译器标志)并发出警告。当编译器生成汇编程序代码时,它不再知道参数,只知道符号/符号指针,因此链接器无法检测到这一点(c++可以,因为那里的符号名包含有关参数的信息,因为支持参数重载)。pseduecode:
push arg1
call getInput //the linker only sees this, does not know about stack-frame / arguments当涉及到GETINPUT警告时,您似乎没有在最终结果中包含包含实际符号的编译后的C文件(Keil链接器似乎将符号放在大写,即使名称应该是getInput,或者您也试图调用GETINPUT吗?)
https://stackoverflow.com/questions/34762317
复制相似问题