我的文件中我声明了函数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并且无法单独编译文件。我必须将所有操作系统文件编译在一起,然后将它们安装到内核中,最后启动它。
错误在哪里?
答案 0 :(得分:0)
如果您将符号声明为extern
,则表示在此翻译单元中不。相反,链接器将在链接时搜索符号,搜索所有目标文件和库,并在无法找到它的情况下打印错误消息。
您需要确保在链接期间,使用extern函数的每个目标文件都将与从include.c
生成的对象链接。
除了全局变量之外的函数默认声明为extern
,因此这不是问题所在。
要一起编译多个翻译单元,只需将它们全部传递给编译器。