0

我有我的文件,我在其中声明了函数 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,无法单独编译文件。我必须将所有操作系统文件编译在一起,然后将它们安装到内核中,最后启动它。

错误在哪里?

4

1 回答 1

0

如果您将符号声明为extern,则意味着它不会在此翻译单元中定义。相反,链接器将在链接时搜索符号,搜索所有目标文件和库,并在找不到时打印这样的错误消息。

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

函数,除了全局变量,默认是声明的extern,所以这不是这里的问题。

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

于 2014-04-01T16:27:37.270 回答