我有一个声明了函数function1和function2的文件
include.h in /dir1/dir2/dir3/dir4/
中定义了所有函数和变量
file include.c at path /dir1/dir2/dir3/dir5/
我在path中使用这些函数
/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,不能单独编译文件。我必须将所有的操作系统文件编译在一起,然后将它们安装到内核中,最后启动它。
错误在哪里?
发布于 2014-04-02 00:27:37
如果你声明一个符号为extern,这意味着它将不会被定义在这个翻译单元中。相反,链接器将在链接时搜索符号,搜索所有目标文件和库,如果找不到符号,则打印类似以下的错误消息。
您需要确保在链接过程中,使用extern函数的每个对象文件都将链接到从include.c生成的对象。
函数,而不是全局变量,默认情况下声明为extern,所以这不是这里的问题所在。
要将多个翻译单元编译在一起,只需一次将它们全部传递给编译器。
https://stackoverflow.com/questions/22791467
复制相似问题