我的XV6中有三个文件:testmain.c,foo.h和foo.c:
foo.h:
extern void myfunction(void)
foo.c:
#include "foo.h"
void myfunction(void){
printf(1, "HelloWorld"); }
testmain.c:
#include "foo.h"
int main(void){
myfunction();
return 0 ; }
我在test_main中遇到myfunction()的未定义参考错误。我知道我需要为XV6更改Makefile中的某些内容,但是我不知道是什么。这就是我在XV6 Makefile中所做的更改:
UPROGS=\
_cat\
_echo\
_forktest\
_grep\
_init\
_kill\
_ln\
_ls\
_mkdir\
_rm\
_sh\
_stressfs\
_usertests\
_wc\
_zombie\
_foo\
_testmain\
答案 0 :(得分:0)
您需要在Makefile
中进行一些更改:
_testmain
程序,_testmain
依赖是什么(如果适用)。_testmain
:UPROGS=\
_testmain\
_cat\
_crash\
_echo\
_factor\
....
_testmain
依赖项:由于您的_testmain
程序依赖于两个文件,因此您必须创建一个特殊的规则来告知构建者(我根据_%: %.o $(ULIB)
规则来制定此规则):
_testmain: testmain.o foo.o $(ULIB)
$(LD) $(LDFLAGS) -N -e main -Ttext 0x1000 -o $@ $^
$(OBJDUMP) -S $@ > $*.asm
$(OBJDUMP) -t $@ | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $*.sym