我正试图在我的笔记本电脑上安装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
这是可以的,但当我尝试使用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-dosudo apt-get install libc6-dev-i386
。请参阅下面的Ubuntu 12.04的额外说明。
在RedHat发行版上,包名为glibc-devel.i686
(感谢David Gardner的评论(。
在centos5.8上,程序包名称为glibc-devel.i386
(感谢JimKleck的评论(。
在CentOS 6/7上,程序包名称为glibc-devel.i686
。
在SLES上,它被称为glibc-devel-32bit-dozypper 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位stdc++库。如果您看到此警告:
/usr/bin/ld:找不到-lsdc++。。。。
在Ubuntu上,您需要执行sudo apt-get install g++-multilib
在CentOS 5上,您需要执行yum install libstdc++-devel.i386
在CentOS6上,您需要执行yum install libstdc++-devel.i686
请随时在其他系统的软件包中进行编辑。
来自GNU UPC网站:
编译器构建失败,出现致命错误:gnu/stubs-32.h:没有这样的文件或目录
此错误消息显示在64位系统上,其中GCC/UPCmultilib功能已启用,它指示32位版本的未安装libc。有两种方法可以纠正这个问题:
- 安装32位版本的glibc(例如Fedora上的glibc-devel.i686,CentOS,..(
- 通过提供"--Disable multilib"禁用"multilib"生成打开编译器配置命令
尝试执行sudo apt-get install libc6-dev
。
apt-file
告诉我有问题的文件属于该程序包。
这是GCC wiki常见问题解答,请参阅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:中设置了正确的环境变量
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在进行快速差异后期望找到的位置:
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:在搜索-lgcc_s时跳过不兼容的/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so/usr/bin/ld:找不到-lgcc_scollect2:错误:ld返回1退出状态
解决方案:
我安装了(yum-install(glibc.i686 glibc-devel.i386和libgcc.i686来解决编译问题。
现在,32位(-m32(的编译工作正常。
FWIW,在交叉编译时使用/usr/include中的文件闻起来像是一个错误(或者至少是未来痛苦的潜在来源(。
gnu/stubs-32.h
不直接包含在程序中。它是gnu/stubs.h
的后端类型头文件,就像gnu/stubs-64.h
一样。您可以安装multilib
软件包来添加两者。
#sudo apt get install g++-multlib
应该在64位机器(Debian/Ubuuntu(上修复这个错误。
如果您在使用python的Mac OSX终端中遇到此问题,请尝试更新您正在使用的软件包的版本。所以,转到python中的文件,在指定包的地方,将它们更新到互联网上可用的最新版本。
在Debian/Ubuuntu上使用:
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
stubs.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。compilor必须找到stubs-x32.h。因此,您可以安装带有32位的glibc来解决这个问题。但更好的方法是将拱门指定为64位您只需要在gcc&MAKEFILE中的g++命令。