致命错误:sys/cdefs.h文件或目录不存在|

我已经尝试了几个星期在Ubuntu 14.04 LTS上使用Code::Blocks IDE来编程Atmega16,但是在C::B中编译/构建程序时遇到了以下错误。
/usr/include/features.h|374|fatal error: sys/cdefs.h: No such file or directory|

我已经阅读了this thread,基于此,我试图清除libc6-dev并在删除依赖项时遇到了麻烦。根据以往的经验,我知道很有可能会遇到broken pipe错误。我通过安装失去的依赖项来解决它。
现在仍然出现相同的错误。
8个回答

如果您使用的是amd64架构的安装,您可以尝试安装libc6-dev-i386软件包。这个方法能帮助我解决了与您在尝试编译i8kutils的时候遇到的相同问题。

9这个方法真是太棒了。这应该被接受为正确答案。 - Patryk
17最好安装gcc-multilib和g++-multilib。 - RobotHumans
安装 libc6 和 libc6-dev 对我来说解决了问题。我之前也找到了一些相关参考资料,但可惜我丢失了它。 - Mandar
6如果我在Kali 2016.2中运行sudo apt-get install g++-multilib命令,那么libc6-dev-i386将是其中一个附加的软件包。 - 林果皞
@RobotHumans,安装gcc-multilib会删除我的gcc-5-arm-linux-gnueabi,而且似乎并没有安装任何真正替代它的东西。所以这看起来不是一个好主意。抱歉。 - Alexander Amelkin
3如果你有很多编译器工具链,那可能是一个打包错误。多库版本可以提供32位和64位的构建器,但可能会傻乎乎地说要先删除所有其他工具链,以防止冲突。这对我来说有效,但我没有用于ARM的编译器。我使用虚拟机来进行ARM编译。 - RobotHumans

在我的电脑上,我可能对32位和64位架构文件搞得太乱了,所以我通过安装"g++-multilib"解决了这个问题。

输入命令:
sudo apt-get --reinstall install libc6 libc6-dev

解决了问题。

1嗨,欢迎来到AskUbuntu!请使用https://askubuntu.com/editing-help的指南来格式化您的帖子。 - abu_bua
欢迎来到 Ask Ubuntu!请您检查一下我的编辑,同时也可以阅读一下编辑帮助,以提高将来您回答的可读性... ;-) (CC @abu_bua ) - Fabby

我知道这是一个以Ubuntu为中心的分支,但当我在谷歌上搜索这个错误时,这个页面是第一个出现的(即使我在搜索中加入了-Ubuntu),所以我打算在这里分享我对Arch Linux的解答:
在Arch中,我遇到了/lib/cpp失败的健全性检查,因为glibc软件包损坏并且缺少所有的/usr/include/sys头文件。我通过重新编译glibc来解决了这个错误。

6哈哈,几个月前我解决了这个问题,但是我完全忘记了。所以我又在这里寻找解决方案。谢天谢地有这个网站存在。:) - thebunnyrules
那个评论 :) 我听说Stack Exchange的网站总体上以前已经做过这种事情很多次了 - Paul Stelian
这几乎把我弄死了,重新安装了 Arch,却无法编译任何东西。我检查了一下,/usr/include/sys 目录是完全空的!重新安装了 glibc,一切都完美了。非常感谢! - Ryan Kozak

看起来 sys/cdefs.h 被定义在 /usr/include/x86_64-linux-gnu/sys 下,但是 /usr/include/x86_64-linux-gnu 不是默认的 INCLUDE_PATH

使用 apt install gcc-multilib 命令将安装你所需的库文件 libc6-dev-i386,同时也会安装一些未来可能需要的其他软件包。

我是通过不小心添加了-m32选项得到这个结果的(gcc告诉我要添加-maes,但是它是错误的)。

我在尝试编译openssl-1.0.2a时遇到了这个问题,当时我在一个运行64位内核的wheezy 32位分区中进行chroot。"./config"脚本太聪明了,决定配置为amd64。我通过使用MACHINE=i386 ./config --prefix=$HOME解决了这个问题,然后make成功地运行而没有错误。