it-swarm.cn

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

我想在我的笔记本电脑上安装Nachos,笔记本电脑上有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      

这没关系,但是当我尝试构建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

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

156
Ashish Agarwal

你错过了32位libc dev包:

Ubuntu 它被称为libc6-dev-i386 - 做Sudo apt-get install libc6-dev-i386。有关Ubuntu 12.04的其他说明,请参见下文。

Red Hat distros,包名是glibc-devel.i686(感谢David Gardner的评论)。

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

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

On _ sles _ 它叫做glibc-devel-32bit - 做zypper in glibc-devel-32bit

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

ArchLinux ,包名是lib32-glibc - 执行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位stdc ++库。如果您看到此警告:

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

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

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

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

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

324
Timothy Jones

来自 GNU UPC网站

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

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

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

尝试做一个Sudo apt-get install libc6-dev

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

9
Keith Layne

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

7
Jonathan Wakely

我在Fedora 18盒子上遇到以下错误:


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

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

2./usr/bin/ld:在搜索-lgcc_s/usr/bin/ld时跳过不兼容的/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so:找不到-lgcc_s collect2:error :ld返回1退出状态

解:

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

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

2
user2223366

嗯,我在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在执行快速差异后期望找到它的位置:

[email protected]:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
[email protected]:/usr/include/i386-linux-gnu/gnu$ Sudo cp stubs-32.h ../../gnu/
[Sudo] password for vic: 
[email protected]:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
[email protected]:/usr/include/i386-linux-gnu/gnu$

它正在编译,让我们看看它是否抱怨更多......

1
Victor Parmar

如果您在使用python的Mac-OSX终端中遇到此问题,请尝试更新您正在使用的软件包的版本。因此,转到python中的文件以及指定软件包的位置,将它们更新为Internet上提供的最新版本。

0
D.Bhatia

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

0
user2775212

#Sudo apt-get install g ++ - multilib

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

0
skrishnakar

FWIW,在交叉编译时使用来自/ usr/include的文件时,它闻起来像是一个错误(或至少是未来痛苦的潜在来源)。

0
user47559