标题中函数的多重定义 - 先前在同一行上定义

时间:2017-11-25 21:09:03

标签: c linux-kernel kernel

我正在编译内核,我在头文件中遇到了问题。错误是荒谬的,我无法弄清楚。

令人不快的几行是:

#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关键字允许编译器指向错误的实际来源。

0 个答案:

没有答案