ChatGPT解决这个技术问题 Extra ChatGPT

编译 Nachos 源代码时出现错误“gnu/stubs-32.h: No such file or directory”

我正在尝试在我的笔记本电脑上安装 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,否则一切正常。

感谢您的建议,程序现在开始编译但我收到此错误_嗨,现在我有此错误 - /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/gcc/x86_64- linux-gnu/4.5.2/libstdc++.a 搜索时 -lstdc++ /usr/bin/ld: 找不到 -lstdc++ collect2: ld 返回 1 exit status make: *** [nachos] Error 1 关于如何修复的任何想法这个 ?我该怎么办?

n
noraj

您缺少 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

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


也许我没有找到那个包的原因是我的笔记本电脑是 32 位的……但我确实找到了 libc-dev-amd64。我的错。
是的,我会说他可能在 64 位机器上,这就是文件丢失的原因。在我的 64 位机器上,stubs.h(他有)在 libc6-dev 中,而 stubs-32.h(他没有)在 libc6-dev-i386 中。关于 apt-file 的好提示 - 我不知道 :)
您可以使用 sudo apt-get install g++-multilib 获取该库的 32 位版本
对于那些在基于 Red Hat 的发行版上遇到此问题的人,该软件包是 glibc-devel.i686 (我刚刚做过,这个答案有助于为我指明正确的方向:)
Ubuntu 12.04 上存在一个已知问题,即在安装后将此文件放在非标准目录中。这个解决方案最终对我有用gcc.gnu.org/ml/gcc/2012-02/msg00314.html
i
ignis

GNU UPC website

编译器构建失败并出现致命错误: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 部分
@djhaskin987,gccupc.org 不是源,gcc.gnu.org 是
我在 x64 centos 6.4 上做了“yum install glibc-devel.i686”
你如何使用基于 autoconf 的 make 系统来做到这一点?我试过传递--disable-multilib,但它没有改变任何东西。我没有安装 multilib 包的 root 访问权限。
K
Keith Layne

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

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


感谢您的回答,它帮助了很多:D
这在多架构机器上是不够的,因为即使您安装了最新版本的 libc6-dev,您仍然会收到此错误。
J
Jonathan Wakely

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


V
Victor Parmar

嗯,我在 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
我在 linux 上运行 VS Code 时遇到了这个问题。将“/usr/include/x86_64-linux-gnu”添加到 c_cpp_properties.json 文件的 includePath 数组对我来说非常适合。感谢您的回答,我找到了该文件的位置。
A
AndreyAkinshin

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


u
user47559

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


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

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


s
skrishnakar

# sudo apt-get install g++-multilib

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


D
D.Bhatia

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


K
Keivan

在 Debian/Ubuntu 上使用:

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


C
Chu Viet Huong

如果你像我一样使用 Arch Linux。你可以试试

sudo pacman -S lib32-gcc-libs

它对我有用。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅