180

我正在尝试在我的笔记本电脑上安装 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 构建 nachos 操作系统的源代码时,我收到了这个错误 -

/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。

4

11 回答 11

379

您缺少 32 位 libc 开发包:

Ubuntu上,它被称为 libc6-dev-i386 - do 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 -do zypper in glibc-devel-32bit

Gentoo上,它被称为sys-libs/glibc-do emerge -1a sys-libs/gcc [ source ](注意:可以equery用来确认这是正确的;do 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: 找不到 -lstdc++ ....

Ubuntu上 ,你需要做 sudo apt-get install g++-multilib

CentOS 5上你需要做yum install libstdc++-devel.i386

CentOS 6上你需要做yum install libstdc++-devel.i686

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

于 2011-09-14T07:25:35.477 回答
55

来自GNU UPC 网站

编译器构建失败并出现致命错误:gnu/stubs-32.h: No such file or directory

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

  • 安装 32 位版本的 glibc(例如,Fedora、CentOS 上的 glibc-devel.i686,..)
  • 通过在编译器配置命令上提供“--disable-multilib”开关来禁用“multilib”构建
于 2013-01-21T13:10:06.800 回答
9

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

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

于 2011-09-14T07:24:32.937 回答
7

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

于 2013-09-05T08:33:37.897 回答
2

嗯,我在 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$

现在正在编译,看看是不是抱怨多了……

于 2013-02-20T11:23:30.107 回答
2

我在 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) 的编译工作正常。

于 2013-03-29T05:52:30.713 回答
0

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

于 2011-09-14T19:08:25.523 回答
0

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

于 2013-09-13T06:00:15.990 回答
0

# sudo apt-get install g++-multilib

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

于 2015-01-30T15:31:16.410 回答
0

如果您在使用 python 的 Mac-OSX 终端中遇到此问题,请尝试更新您正在使用的软件包的版本。因此,转到您在 python 中的文件以及您指定包的位置,将它们更新到互联网上可用的最新版本。

于 2018-06-20T22:25:14.460 回答
0

在 Debian/Ubuntu 上使用:

sudo apt-get install g++-multilib libc6-dev-i386

于 2020-07-08T20:41:08.283 回答