C++-x86/ubuntu上的程序集链接-对ThreadRoot、SWITCH的未定义引用



我正在Ubuntu 12.04 上构建Nachos源代码

如果我们相信"lscpu"输出,那么机器架构就是x86。我在制作的最后一步得到以下错误:

$make

g++-m32-p-I/网络-I/文件系统-I/userprog-I/螺纹-I/机器-I/lib-iquote-Dx86-DLINUX-c/线程/交换机。S

g++位图。o调试。o libtest。o sysdep。o中断。o统计。o计时器。o控制台。o机器。o mipsim。o翻译。o网络。o磁盘。o报警。o内核。o主。o调度程序。o同步。o线程。o地址空间。o异常。o同步控制台。o目录。o文件系统。o pbitmap。o打开文件。o同步磁盘。o post.o开关。o-m32-o nachos

scheduler.o:在函数"scheduler::Run(Thread*,bool)"中:

/home/userx/nachos/nachos-4.0/code/build/linux/../threads/schedur.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:*[玉米片]错误1$

这是开关。具有符号defs的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来获得更多的arch,如DECMIPS、POWERPC、APPLEPOWERPC等。是的,我的env$PATH包括switch.s所在的目录:/home/userx/nachos/nachos-4.0/code/threads/如果需要更多信息进行调试,请告诉我。非常感谢。

尝试在具有外部"C"SWITCH和ThreadRoot的C头文件中添加下划线,并更改错误所在的.C文件。我的意思是使用_SWITCH代替SWITCH,ThreadRoot也是如此。

最新更新