【问题标题】:C++-Assembly linking on x86 / ubuntu - undefined reference to ThreadRoot, SWITCHx86 / ubuntu 上的 C++ 程序集链接 - 未定义对 ThreadRoot、SWITCH 的引用
【发布时间】: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/ 如果需要更多信息来调试,请告诉我。非常感谢。

【问题讨论】:

    标签: linux gcc x86 g++ x86-64


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多