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


170

我正在尝试在笔记本电脑上安装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 os的源代码时,出现此错误-

/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之外,其他一切都正常。


1
谢谢您的建议,程序现在开始编译,但出现此错误_嗨,现在我遇到此错误-/ usr / bin / ld:跳过不兼容的/ usr / lib / x86_64-linux-gnu / gcc / x86_64- linux-gnu / 4.5.2 / libstdc ++。a在搜索-lstdc ++ / usr / bin / ld时:找不到-lstdc ++ collect2:ld返回1退出状态make:*** [nachos]错误1关于如何修复的任何想法这个 ?我该怎么办?
Ashish Agarwal

Answers:


352

您缺少32位libc dev软件包:

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-做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吗?有一个已知的问题,将文件放置在非标准位置。您需要执行以下操作:

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

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


2
也许没有找到该包装的原因是我的笔记本电脑是32位...但是我找到了libc-dev-amd64。我的错。
基思·莱恩

1
是的,我想他可能是在64位计算机上,这就是文件丢失的原因。在我的64位计算机上,stubs.h(他拥有)在libc6-dev中,而stubs-32.h(他没有)在libc6-dev-i386中。关于apt-file的好技巧-我不知道:)
Timothy Jones

8
您可以通过拿起库的32位版本sudo apt-get install g++-multilib
蒂莫西·琼斯

1
对于那些在基于Red Hat的发行版上遇到此问题的人,该软件包是glibc-devel.i686(我刚刚这样做了,这个回答有助于向正确的方向指明方向:)
David Gardner

2
在Ubuntu 12.04上存在一个已知问题,该问题在安装后将其放置在非标准目录中。最后,该解决方案对我有用gcc.gnu.org/ml/gcc/2012-02/msg00314.html
Eric Chen

55

GNU UPC网站

编译器生成失败并出现致命错误:gnu / stubs-32.h:没有此类文件或目录

在启用了GCC / UPC multilib功能的64位系统上会显示此错误消息,它表示未安装32位版本的libc。有两种方法可以解决此问题:

  • 安装32位版本的glibc(例如Fedora,CentOS等上的glibc-devel.i686)
  • 通过在编译器配置命令上提供“ --disable-multilib”开关来禁用“ multilib”构建

8
感谢您提供一个特别有用的答案:该--disable-multilib部分
死灵法师,

3
@ djhaskin987,gccupc.org不是源,gcc.gnu.org是
Jonathan Wakely

我没有在x64的CentOS 6.4 '百胜安装的glibc-devel.i686'
plhn

1
如何使用基于autoconf的make系统执行此操作?我尝试传递--disable-multilib,但是它没有任何改变。我没有root权限来安装multilib软件包。
user632657 2014年

9

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

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


谢谢您的回答,它对您有所帮助:D
Ashish Agarwal

在多体系结构计算机上,这还不够,因为即使您安装了最新版本的libc6-dev,您仍然会收到此错误。
耶利米2012年


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


1

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

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


奇。该软件包肯定在12.04(精确版)中可用,请参见packages.ubuntu.com/precise/libc6-dev-i386
Timothy Jones

0

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


1
我认为他正在尝试构建工具链,而不是与那些包含项交叉编译。
Keith Layne

0

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


0

#sudo apt-get install g ++-multilib

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


0

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


0

在Debian / Ubuntu上使用:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.