Я создаю исходный код Nachos на Ubuntu 12.04.
Если верить выводу "lscpu", то машинная арка - это x86. Я получаю следующую ошибку на последнем шаге make:
$ сделать
g++ -m32 -P -I../сеть -I../filesys -I../userprog -I../threads -I../machine -I../lib -iquote -Dx86 -DLINUX -c . ./потоки/переключатель.S
g++ bitmap.o debug.o libtest.o sysdep.o прерывание.o статистика.o таймер.o консоль.o машина.o mipssim.o перевод. .o synch.o thread.o адресное пространство.o исключение.o synchconsole.o каталог.o filehdr.o filesys.o pbitmap.o openfile.o synchdisk.o post.o переключатель.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 $
Вот switch.S с символом defs --
/* 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 и т. д. Да, мой env $PATH включает каталог, в котором находится switch.s:/home/userx/nachos/NachOS-4.0/code/threads/ Пожалуйста, дайте мне знать если для отладки требуется дополнительная информация. Большое спасибо.