【发布时间】:2014-01-12 13:34:03
【问题描述】:
我正在 Ubuntu 12.04 上构建 Nachos 源代码
如果我们相信“lscpu”输出,机器架构是 x86。在 make 的最后一步出现以下错误:
$ 制作
g++ -m32 -P -I../network -I../filesys -I../userprog -I../threads -I../machine -I../lib -iquote -Dx86 -DLINUX -c ../threads/switch.S
g++ bitmap.o debug.o libtest.o sysdep.o interrupt.o stats.o timer.o console.o machine.o mipssim.o translate.o network.o disk.o alarm.o kernel.o main .o scheduler.o synch.o thread.o addrspace.o exception.o synchconsole.o directory.o filehdr.o filesys.o pbitmap.o openfile.o synchdisk.o post.o switch.o -m32 -o nachos
scheduler.o:在函数`Scheduler::Run(Thread*, bool)'中:
/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/scheduler.cc:133:未定义对“SWITCH”的引用
thread.o: 在函数 `Thread::StackAllocate(void ()(void), void*)':
/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/thread.cc:345:未定义对“ThreadRoot”的引用
/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/thread.cc:356:未定义对“ThreadRoot”的引用
collect2: ld 返回 1 个退出状态 make: * [nachos] 错误 1 $
这里是带有 defs 符号的 switch.S --
/* We define two routines for each architecture:
*
* ThreadRoot(InitialPC, InitialArg, WhenDonePC, StartupPC)
<...>
#ifdef SOLARIS
.globl ThreadRoot
ThreadRoot:
#else
.globl _ThreadRoot
_ThreadRoot:
#endif
#ifdef x86
.text
.align 2
.globl ThreadRoot
.globl _ThreadRoot
_ThreadRoot:
ThreadRoot:
<...>
.globl SWITCH
.globl _SWITCH
_SWITCH:
SWITCH:
<...>
#endif
我已经跳过#ifdefs 以获得更多的拱门,如 DECMIPS、POWERPC、APPLEPOWERPC 等。 是的,我的环境 $PATH 包括 switch.s 所在的目录:/home/userx/nachos/NachOS-4.0/code/threads/ 如果需要更多信息来调试,请告诉我。非常感谢。
【问题讨论】: