66/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory

Ubuntu 18.04编译opencv-3.2.0时出现如下错误:

[ 20%] Generating precomp.hpp.gch/opencv_viz_Release.gch
In file included from /usr/include/c++/7/ext/string_conversions.h:41:0,
                 from /usr/include/c++/7/bits/basic_string.h:6361,
                 from /usr/include/c++/7/string:52,
                 from /usr/include/c++/7/stdexcept:39,
                 from /usr/include/c++/7/array:39,
                 from /usr/include/c++/7/tuple:39,
                 from /usr/include/c++/7/bits/stl_map.h:63,
                 from /usr/include/c++/7/map:61,
                 from /home/hri/MyInstallSoftware/opencv-3.2.0/build/modules/viz/precomp.hpp:49:
/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>
               ^~~~~~~~~~
compilation terminated.
modules/viz/CMakeFiles/pch_Generate_opencv_viz.dir/build.make:62: recipe for target 'modules/viz/precomp.hpp.gch/opencv_viz_Release.gch' failed
make[2]: *** [modules/viz/precomp.hpp.gch/opencv_viz_Release.gch] Error 1
CMakeFiles/Makefile2:3122: recipe for target 'modules/viz/CMakeFiles/pch_Generate_opencv_viz.dir/all' failed
make[1]: *** [modules/viz/CMakeFiles/pch_Generate_opencv_viz.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

原因分析:

这是由于gcc7已经吧stdlib.h纳入了libstdc++以进行更好的优化,C Library的头文件stdlib.h使用 Include_next,而include_next对gcc系统头文件路径很敏感。

推荐的修复方法是不要把include路径作为系统目录,而是使用标准方式包含include 目录

解决方法:

在编译opecv-3.2.0时,加入如下选项:

-DENABLE_PRECOMPILED_HEADERS=OFF
<think>首先,用户要求使用中文回答问题。用户的问题是:“/usr/include/features.h:374:12: fatal error: sys/cdefs.h: No such file or directory”。这是一个编译错误消息,表明在编译过程中找不到头文件。 我的回答需要解释这个错误的原因并提供解决方案。然后,在回答末尾,我必须提出3-5个相关问题。这些必须用“§§相关问题§§”开头,并且不能换行分散。 关键点: - 回答必须用中文。 - 解释错误:这个错误通常发生在Linux系统中,当尝试编译程序时,缺少必要的头文件。具体来说,sys/cdefs.h 是glibc的一部分,可能由于系统不完整环境问题导致缺失。 - 提供解决方案:常见的解决方法是安装缺失的开发包,比如在Ubuntu上安装build-essentiallibc6-dev。 - 在回答后,添加“§§相关问题§§”,然后列出3-5个相关问题。问题应该基于用户的问题和我的回答,比如关于编译错误、系统配置等。 结构回答: 1. 解释错误:简要说明错误原因。 2. 提供解决方案:给出具体的步骤。 3. 添加相关问题:以“§§相关问题§§”开头,列出3-5个问题。 相关问题示例: - 基于错误消息:如何修复类似的缺失头文件错误? - 扩展:如何避免在编译时出现头文件缺失? - 系统相关:在Ubuntu上如何安装开发包? - 其他:这个错误是否与特定编译器相关? 确保相关问题数量在3-5个。 完整回答: - 开头:解释错误。 - 中间:解决方案。 - 结尾:相关问题。 最后,输出“§§相关问题§§”后直接列出问题,用数字点表示,如: §§相关问题§§ 1. ··· 2. ··· 3. ··· 4. ··· 5. ··· 现在,草拟回答内容。</think>这个错误消息“/usr/include/features.h:374:12: fatal error: sys/cdefs.h: No such file or directory”通常出现在Linux系统(如UbuntuDebian)中编译C/C++程序时,表示编译器无法找到所需的头文件。错误的原因是系统缺少glibc(GNU C Library)的开发包相关依赖,导致`sys/cdefs.h`文件缺失。这常见于: - 系统未安装完整的开发工具链。 - 环境变量(如`CPATH``INCLUDE_PATH`)配置错误。 - 软件包损坏部分安装。 ### 解决方案: 1. **安装缺失的开发包**:在基于Debian的系统(如Ubuntu)中,运行以下命令: ```bash sudo apt update sudo apt install build-essential libc6-dev ``` 这会安装编译所需的核心工具和头文件。 2. **检查系统完整性**:如果安装后仍报错,尝试修复依赖: ```bash sudo apt --fix-broken install ``` 3. **验证环境**:确保编译器路径正确,例如使用`gcc -v`检查版本。如果使用自定义环境(如容器交叉编译),确认头文件路径已正确设置。 4. **重新编译**:安装完成后,重新运行编译命令(如`make``gcc`)。 如果问题持续,检查系统日志(`/var/log/apt/history.log`)考虑更新系统(`sudo apt upgrade`)。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值