在编译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)上的这个错误。