我正在尝试在我的笔记本电脑上安装 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,否则一切正常。
您缺少 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
- do 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
请随时在其他系统的软件包中进行编辑。
编译器构建失败并出现致命错误:gnu/stubs-32.h: No such file or directory 此错误消息显示在启用 GCC/UPC 多库功能的 64 位系统上,它表明 32 位版本的 libc 不是安装。有两种方法可以解决这个问题: 安装 32 位版本的 glibc(例如,在 Fedora、CentOS 上的 glibc-devel.i686、..) 通过在编译器配置命令上提供“--disable-multilib”开关来禁用“multilib”构建
--disable-multilib
部分
尝试做一个sudo apt-get install libc6-dev
。
apt-file
告诉我有问题的文件属于该包。
嗯,我在 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$
现在正在编译,看看是不是抱怨多了……
我在 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) 的编译工作正常。
FWIW,在交叉编译时使用 /usr/include 中的文件听起来像是一个错误(或至少是未来痛苦的潜在来源)。
gnu/stubs-32.h
未直接包含在程序中。它是 gnu/stubs.h
的后端类型头文件,就像 gnu/stubs-64.h
。您可以安装 multilib
软件包来添加两者。
# sudo apt-get install g++-multilib
应该在 64 位机器(Debian/Ubuntu)上修复这个错误。
如果您在使用 python 的 Mac-OSX 终端中遇到此问题,请尝试更新您正在使用的软件包的版本。因此,转到您在 python 中的文件以及您指定包的位置,将它们更新到互联网上可用的最新版本。
在 Debian/Ubuntu 上使用:
sudo apt-get install g++-multilib libc6-dev-i386
如果你像我一样使用 Arch Linux。你可以试试
sudo pacman -S lib32-gcc-libs
它对我有用。
libc-dev-amd64
。我的错。sudo apt-get install g++-multilib
获取该库的 32 位版本