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

我正试图在笔记本电脑上安装Nachos,笔记本电脑上安装了Ubuntu 11.04。

代码是在C中,所以build立它我假设我将需要交叉编译器。 这是我的问题所在。 我使用该命令下载了MIPS交叉编译器的源代码

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

我解压缩使用

 tar zxvf mips-decstation.linux-xgcc.gz 

这是好的,但是当我尝试构build玉米片的源代码,使用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。

你错过了32位的libc开发包:

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 glibc-devel.i686 ,软件包名称是glibc-devel.i686

SLES上它被称为glibc-devel-32bit – zypper in glibc-devel-32bit执行zypper in glibc-devel-32bit


你使用的是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) 

在build立之前(在你的.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

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

来自GNU UPC网站 :

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

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

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

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

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

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

嗯,我在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中设置了正确的环境variables:

 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后find它:

 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$ 

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

我在fedora 18盒子上遇到下面的错误:


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

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

2. / usr / bin / ld:在search-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安装)glibc.i686 glibc-devel.i386和libgcc.i686摆脱编译问题。

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

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

gnu/stubs-32.h没有被包含在程序中。 这是一个gnu/stubs.h的后端types头文件,就像gnu/stubs-64.h 。 您可以安装multilib软件包以添加两者。

#sudo apt-get install g ++ – multilib

应该修复64位机器(Debian / Ubuntu)上的这个错误。