我前几天在做一个项目的时候一直会出现下面这个问题:
第一种情况:声明的该函数但是没有定义
首先来看第二个问题:
login.c:(.text+0x7f8): undefined reference to `dealaccuntpassword'
第二个问题是我在出现了第一个问题(homeinterface.c:(.text+0x1364): undefined reference to `processnewnodes')后把logini.c里的dealaccuntpassword函数屏蔽掉,但是对于dealaccuntpassword应用没有屏蔽,在login.h里也没有屏蔽掉,就出现了这个问题。
但是当我把logini.c里的dealaccuntpassword函数接口取消屏蔽时,第二个问题就不会再次出现
所以我认为 .text+0x7f8问题的原因是把logini.c里的dealaccuntpassword函数屏蔽掉,在login.h里没有屏蔽掉。
后来我有再次重复了几次其他接口,是同样的结果。
第二种情况:函数参数不对
第二个问题解决后,我就在想第一个问题是否跟第一个问题类似的问题。我找到了(.text+0x1364)问题前边的hemointerface.c和hemointerface.h文件,到那时我发现,在hemointerface.c的直接应用了processnewnodes这个函数,而没有在hemointerface.h声明,但是processnewnodes这个函数是在文件内,我把另一个文件也包含了。
当我找到processnewnodes函数原型的时候,发现是参数问题。修改后就直接编译通过了。
第三种情况:定义该函数的文件没有参与编译
最后还有一种可能:在编译的时候,没有把该函数编译进去
这次的报错是说我的问题是在interface.c文件内部,但是我的registration函数是写在reg.c文件里的,仔细观察前两行参与编译的文件很容易就发现了,我的编译文件里没有reg.c。
我把reg.c参与编译后就可以通过编译了