gpt4 book ai didi

linux - x86/ubuntu 上的 C++-Assembly 链接 - 对 ThreadRoot、SWITCH 的 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:13 24 4
gpt4 key购买 nike

我正在 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++ 位图.o debug.o libtest.o sysdep.o 中断.o 统计数据.o 计时器.o 控制台.o 机器.o mipssim.o 翻译.o 网络.o 磁盘.o 警报.o 内核.o main.o 调度程序.o 同步.o 线程.o addrspace.o 异常.o 同步控制台.o 目录.o filehdr.o 文件系统.o pbitmap.o openfile.o 同步磁盘.o 帖子.o 开关.o -m3 2 -o Jade 米片

scheduler.o:在函数 `Scheduler::Run(Thread*, bool)' 中:

/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/scheduler.cc:133:对“SWITCH”的 undefined reference

thread.o:在函数 `Thread::StackAllocate(void ()(void), void*)' 中:

/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/thread.cc:345:对“ThreadRoot”的 undefined reference

/home/userx/nachos/NachOS-4.0/code/build.linux/../threads/thread.cc:356:对“ThreadRoot”的 undefined reference

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/如果调试需要更多信息,请告诉我。非常感谢。

最佳答案

尝试在具有 extern "C"SWITCH 和 ThreadRoot 的 C 头文件中添加下划线,并更改错误所在的 .c 文件。我的意思是使用 _SWITCH 而不是 SWITCH,对于 ThreadRoot 也是如此。

关于linux - x86/ubuntu 上的 C++-Assembly 链接 - 对 ThreadRoot、SWITCH 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com