编译 Nachos 源代码时出错"gnu/stubs-32.h: No such file or directory"



我正试图在我的笔记本电脑上安装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++命令。

相关内容

最新更新