编译Nachos源代码时出错"gnu/stubs-32.h:没有这样的文件或目录"

Ash*_*wal 165 ubuntu gcc mips cross-compiling nachos

我想在我的笔记本电脑上安装Nachos,笔记本电脑上有Ubuntu 11.04.

代码在C中,所以要构建它我假设我需要交叉编译器.这就是我的问题所在.我使用命令下载了MIPS交叉编译器的源代码

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz
Run Code Online (Sandbox Code Playgroud)

我用它解压缩它

tar zxvf mips-decstation.linux-xgcc.gz      
Run Code Online (Sandbox Code Playgroud)

这没关系,但是当我尝试构建nachos操作系统的源代码时,使用make,我得到了这个错误 -

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我试图按照这里给出的指示 - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm,一切正常,除非我尝试使用make.

Tim*_*nes 337

你错过了32位libc dev包:

Ubuntu上它叫做libc6-dev-i386 - 做sudo apt-get install libc6-dev-i386.有关Ubuntu 12.04的其他说明,请参见下文.

关于Red Hat发行版,包名是glibc-devel.i686(感谢David Gardner的评论)

CentOS 5.8上,包名是glibc-devel.i386(感谢JimKleck的评论)

CentOS 6/7上,包名是glibc-devel.i686.

SLES上它被称为glibc-devel-32bit - dozypper in glibc-devel-32bit

Gentoo上它被称为sys-libs/glibc- 做emerge -1a sys-libs/gcc [ 来源 ](注意:可以equery用来确认这是正确的;做equery belongs belongs /usr/include/gnu/stubs-32.h)


你在使用Ubuntu 12.04吗?存在将文件置于非标准位置的已知问题.你将需要做的:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
Run Code Online (Sandbox Code Playgroud)

在构建之前的某个地方(比如你的.bashrc).


如果您还在编译C++代码,那么您还需要32位stdc ++库.如果您看到此警告:

..../usr/bin/ld:找不到-lstdc ++ ....

Ubuntu上 你需要做 lib32-glibc

CentOS 5上你需要做pacman -S lib32-glibc

CentOS 6上你需要做sudo apt-get install g++-multilib

请随意在其他系统的软件包中进行编辑.

  • 您可以使用`sudo apt-get install g ++ - multilib`来获取该库的32位版本 (8认同)
  • 也许我没有找到那个包的原因是我的笔记本电脑是32位...但我找到了`libc-dev-amd64`.我的错. (2认同)
  • Ubuntu 12.04上存在一个已知问题,它在安装后将此文件放在非标准目录中.这个解决方案最终对我有用http://gcc.gnu.org/ml/gcc/2012-02/msg00314.html. (2认同)
  • **fedora** `sudo dnf install glibc-devel.i686` (2认同)

ign*_*nis 54

来自GNU UPC网站:

编译器构建失败,出现致命错误:gnu/stubs-32.h:没有这样的文件或目录

此错误消息显示在启用了GCC/UPC multilib功能的64位系统上,它表示未安装32位版本的libc.有两种方法可以解决此问题:

  • 安装32位版本的glibc(例如Fedora上的glibc-devel.i686,CentOS,..)
  • 通过在编译器配置命令上提供"--disable-multilib"开关来禁用"multilib"构建

  • 谢谢你提供了一个特别有用的答案:`--disable-multilib`部分 (8认同)
  • @ djhaskin987,gccupc.org不是来源,gcc.gnu.org是 (3认同)

Kei*_*yne 9

尝试做一个sudo apt-get install libc6-dev.

apt-file 告诉我有问题的文件属于该包.


Jon*_*ely 7

现在在GCC维基常见问题中,请参阅http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h