extern关键字显示对我的函数的未定义引用

时间:2014-04-01 16:22:16

标签: c extern os161

我的文件中我声明了函数function1和function2

include.h in /dir1/dir2/dir3/dir4/

我在

中定义了所有函数和变量

file include.c at path /dir1/dir2/dir3/dir5/

我在路径

使用这些功能

/dir1/drr2/dir3/dir6/

我的伪代码是......

#include "include.h"
extern int function1();
extern void function(); 
...

function release()
{
  int i = function1();
} 
编译后跟错误

undefined reference to 'function1'
relocation truncated to fit: R_MIPS_26 against 'function1'  

我知道当我们使用extern时我们必须编译这两个文件,但我目前正在使用OS161并且无法单独编译文件。我必须将所有操作系统文件编译在一起,然后将它们安装到内核中,最后启动它。

错误在哪里?

1 个答案:

答案 0 :(得分:0)

如果您将符号声明为extern,则表示在此翻译单元中。相反,链接器将在链接时搜索符号,搜索所有目标文件和库,并在无法找到它的情况下打印错误消息。

您需要确保在链接期间,使用extern函数的每个目标文件都将与从include.c生成的对象链接。

除了全局变量之外的函数默认声明为extern,因此这不是问题所在。

要一起编译多个翻译单元,只需将​​它们全部传递给编译器。