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

我正在尝试在我的笔记本电脑上安装玉米片,我在笔记本电脑上安装了 Ubuntu 11.04。

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

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

我用

tar zxvf mips-decstation.linux-xgcc.gz

这是可以的,但是当我尝试使用 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

我试图遵循在这里给出的指示 -http://mll.csie.ntu.edu.tw/course/os_f08/217.htm和一切工作正常,除了当我尝试使用 make。

240009 次浏览

试试 sudo apt-get install libc6-dev

apt-file告诉我有问题的文件属于那个包。

你错过了32位 libc dev 包:

Ubuntu上,它被称为 libc6-dev-i386-do sudo apt-get install libc6-dev-i386

红帽子发行版上,软件包的名称是 glibc-devel.i686(感谢 David Gardner 的评论)。

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

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

SLES上,它被称为 glibc-devel-32位-do zypper in glibc-devel-32bit

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

ArchLinux上,包的名称是 lib32-glibc-do pacman -S lib32-glibc


你正在使用 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)

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


如果您还在编译 C + + 代码,那么还需要32位的标准直流 + + 库。如果你看到这个警告:

. ./usr/bin/ld: can not find-lstdc + + ... .

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

CentOS 5上你需要做 yum install libstdc++-devel.i386

CentOS 6上你需要做 yum install libstdc++-devel.i686

请随意编辑其他系统的软件包。

FWIW,在交叉编译时使用/usr/include 中的文件似乎是一个错误(或者至少是未来痛苦的潜在来源)。

来自 GNU UPC 网站:

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

此错误消息显示在 GCC/UPC 所在的64位系统上 启用了 multilib 特性,并指示32位版本的 没有安装 libc。有两种方法可以纠正这个问题:

  • 在 Fedora 上安装32位版本的 glibc (例如 glibc-devel. i686, CentOS,. .)
  • 禁用‘ multilib’构建,方法是提供“—— Disable-multilib” 打开编译器配置命令

嗯,我在 ubuntu 12.04上,在编译 gcc 4.7.2时也出现了同样的错误

我尝试安装 libc6-dev-i386软件包,得到如下结果:

Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source


E: Package 'libc6-dev-i386' has no installation candidate

我还在 bash 中设置了正确的环境变量:

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)

然而,我仍然得到了错误,然后我简单地复制了 stubs-32.h到 gcc 希望找到它的地方,在做了一个快速的 diff 之后:

vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic:
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$

现在正在编译,看看是否有更多的抱怨..。

我在一个软呢帽18号盒子上发现了一个错误:


1. /usr/include/gnu/stubs.h: 7:27: 致命错误: gnu/stubs-32. h: 没有终止这样的文件或目录编译。

我安装了 glibc.i686和 glibc-devel. i686,然后编译失败,出现以下错误:

2. /usr/bin/ld: 跳过不兼容的/usr/lib/gcc/x86 _ 64-redhat-linux/4.7.2/libgcc _ s. so 当搜索-lgcc _ s 时 /usr/bin/ld: can not find-lgcc _ s/usr/bin/ld: 无法找到-lgcc _ s Error: ld 返回1个退出状态

解决方案:

我安装了(yum install) glibc.i686 glibc-devel. i386和 libgcc.i686来消除编译问题。

现在32位(- m32)的编译工作正常。

这是现在在海湾合作委员会的维基常见问题,见 http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h

gnu/stubs-32.h不直接包含在程序中。它是 gnu/stubs.h的后端类型头文件,就像 gnu/stubs-64.h一样。您可以安装 multilib包来添加这两者。

# sudo apt-get install g + +-multilib

应该在64位机器(Debian/Ubuntu)上修复此错误。

如果您在使用 python 的 Mac-OSX 终端中遇到这个问题,请尝试更新您正在使用的包的版本。因此,转到 python 中的文件,在指定包的位置,将它们更新为互联网上可用的最新版本。

关于 Debian/Ubuntu 的使用:

sudo apt-get install g++-multilib libc6-dev-i386

如果你像我一样使用 Arch Linux,你可以试试

  • Sudo pacman-S lib32-gcc-libs

这招对我很管用。

嗨,我遇到了同样的问题。当我在 MAKEFILE 加上“-d _ _ TARGET _ ARCH _ x86”时,它起作用了!

错误消息如下:

In file included from /usr/include/string.h:26:
In file included from /usr/include/bits/libc-header-start.h:33:
In file included from /usr/include/features.h:452:
/usr/include/gnu/stubs.h:7:11: fatal error: 'gnu/stubs-32.h' file not found
# include <gnu/stubs-32.h>nter code here

Stus.h 中的内容是

#if !defined __x86_64__
# include <gnu/stubs-32.h>
#endif
#if defined __x86_64__ && defined __LP64__
# include <gnu/stubs-64.h>
#endif
#if defined __x86_64__ && defined __ILP32__
# include <gnu/stubs-x32.h>
#endif

你可以找到真正的原因是缺少宏定义 X86 _ 64。编译器必须找到存根 -x32.h。所以你可以安装一个32位的 glibc 来解决这个问题。但是更好的方法是将拱形特定为64位。您只需在 MAKEFILE 的 gcc & g + + 命令中添加“-d _ _ TARGET _ ARCH _ x86”即可。