我正在尝试在笔记本电脑上安装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
这没关系,但是当我尝试构建nachos os的源代码时,使用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,否则一切正常。
答案 0 :(得分:325)
你错过了32位的libc开发包:
在 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
[source](注意:可以使用equery
确认这是正确的;执行equery belongs belongs /usr/include/gnu/stubs-32.h
)
在 ArchLinux 上,包名称为lib32-glibc
- 执行pacman -S lib32-glibc
。
您使用的是 Ubuntu 12.04 吗?有a known problem that puts the files in a non standard location。您also需要这样做:
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
请随意在其他系统的软件包中进行编辑。
答案 1 :(得分:54)
编译器构建失败并出现致命错误:gnu / stubs-32.h:没有这样的文件或 目录
此错误消息显示在GCC / UPC的64位系统上 multilib功能已启用,它表示32位版本 没有安装libc。有两种方法可以解决此问题:
- 在Fedora上安装32位版本的glibc(例如glibc-devel.i686, CentOS,..)
- 禁用' multilib'通过提供" - disable-multilib"来构建 打开编译器配置命令
答案 2 :(得分:9)
尝试执行sudo apt-get install libc6-dev
。
apt-file
告诉我有问题的文件属于该软件包。
答案 3 :(得分:7)
现在在GCC维基常见问题中,请参阅http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h
答案 4 :(得分: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)的编译工作正常。
答案 5 :(得分: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$
现在正在编译,让我们看看它是否会抱怨更多...
答案 6 :(得分:0)
FWIW,在交叉编译时使用来自/ usr / include的文件时,它闻起来像是一个错误(或者至少是潜在的未来痛苦来源)。
答案 7 :(得分:0)
gnu/stubs-32.h
未包含在程序中。它是gnu/stubs.h
的后端类型头文件,就像gnu/stubs-64.h
一样。您可以安装multilib
包来添加它们。
答案 8 :(得分:0)
#sudo apt-get install g ++ - multilib
应该在64位计算机(Debian / Ubuntu)上修复此错误。
答案 9 :(得分:0)
如果您在使用python的Mac-OSX终端中遇到此问题,请尝试更新正在使用的软件包的版本。因此,转到python中的文件,然后在指定软件包的位置将其更新为Internet上可用的最新版本。
答案 10 :(得分:0)
在Debian / Ubuntu上使用:
sudo apt-get install g++-multilib libc6-dev-i386