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

Error “gnu/stubs-32.h: No such file or directory” while compiling Nachos source code

我正在尝试在笔记本电脑上安装Nachos,并且笔记本电脑上具有Ubuntu 11.04。

代码在C语言中,因此要构建它,我假设我将需要交叉编译器。 这是我的问题所在。 我使用以下命令下载了MIPS交叉编译器的源代码

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

我用解压缩

1
tar zxvf mips-decstation.linux-xgcc.gz

没关系,但是当我尝试使用make构建nachos os的源代码时,出现此错误-

1
/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 dev软件包:

在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 6/7上,软件包名称为glibc-devel.i686

在SLES上,它称为glibc-devel-32bit-执行zypper in glibc-devel-32bit

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

在ArchLinux上,程序包名称为lib32-glibc-执行pacman -S lib32-glibc

您正在使用Ubuntu 12.04吗?存在一个已知的问题,将文件放置在非标准位置。您还需要执行以下操作:

1
2
3
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: cannot find -lstdc++ ....

在Ubuntu上,您需要执行sudo apt-get install g++-multilib

在CentOS 5上,您需要执行yum install libstdc++-devel.i386

在CentOS 6上,您需要执行yum install libstdc++-devel.i686

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


从GNU UPC网站:

Compiler build fails with fatal error: gnu/stubs-32.h: No such file or
directory

This error message shows up on the 64 bit systems where GCC/UPC
multilib feature is enabled, and it indicates that 32 bit version of
libc is not installed. There are two ways to correct this problem:

  • Install 32 bit version of glibc (e.g. glibc-devel.i686 on Fedora,
    CentOS, ..)
  • Disable 'multilib' build by supplying"--disable-multilib"
    switch on the compiler configuration command


尝试执行sudo apt-get install libc6-dev

apt-file告诉我该文件属于该软件包。


现在位于GCC Wiki常见问题解答中,请参阅http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h


我在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/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so
/ usr / bin / ld:找不到-lgcc_s
collect2:错误:ld返回1退出状态

解:

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

现在,对于32位(-m32)的编译工作正常。


嗯,我在ubuntu 12.04上,尝试编译gcc 4.7.2时遇到了同样的错误

我尝试安装libc6-dev-i386软件包,并得到以下信息:

1
2
3
4
5
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中设置了正确的环境变量:

1
2
3
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进行快速比较后期望找到的地方:

1
2
3
4
5
6
7
8
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$

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


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


#sudo apt-get install g ++-multilib

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


gnu/stubs-32.h不直接包含在程序中。就像gnu/stubs-64.h一样,它是gnu/stubs.h的后端类型头文件。您可以安装multilib软件包以同时添加两者。


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