我正在编译内核,我在头文件中遇到了问题。错误是荒谬的,我无法弄清楚。
令人不快的几行是:
#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
/*
* return_address uses walk_stackframe to do it's work. If both
* CONFIG_FRAME_POINTER=y and CONFIG_ARM_UNWIND=y walk_stackframe uses
unwind
* information. For this to work in the function tracer many functions
would
* have to be marked with __notrace. So for now just depend on
* !CONFIG_ARM_UNWIND.
*/
void *return_address(unsigned int);
#else
extern inline void *return_address(unsigned int level)
{ //<--Line 49
return NULL;
}
#endif
#define ftrace_return_address(n) return_address(n)
错误是:
init/do_mounts_initrd.o: In function `return_address':
/home/name/rpl-enabled-kernel/./arch/arm/include/asm/ftrace.h:49:
multiple definition of `return_address'
init/do_mounts.o:/home/name/rpl-enabled-
kernel/./arch/arm/include/asm/ftrace.h:49: first defined here
第49行是开放式支架。我真的不明白错误,但它似乎暗示return_address
无法定义它的位置,因为它已经定义了(它有很多stackoverflow解决方案),但它指向的行说它已经定义了定义发生的地方。
它是以某种方式定义自己两次?是否有可能将标题包含在某处?
编辑:被宣布为extern不是问题,但它似乎已经导致了这个问题。该函数是多重定义的(基于某些预处理器ifs等),删除extern关键字允许编译器指向错误的实际来源。