编译OpenCV时出错,致命错误:stdlib.h:没有这样的文件或目录

时间:2016-10-26 12:56:54

标签: opencv gcc cmake

我正在尝试编译OpenCV。我已经尝试过master分支(目前在提交dc9602e上)和版本/标记3.1.0。我使用Fedora 24,我首先尝试使用Fedora附带的gcc(gcc(GCC)6.2.1 20160916(Red Hat 6.2.1-2))。我也尝试过在我的机器上编译的GCC 6.2.0。

我使用带有以下参数的cmake:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_NEW_PYTHON_SUPPORT=ON -DINSTALL_PYTHON_EXAMPLES=ON -DWITH_TBB=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_EIGEN=ON -DWITH_OPENEXR=ON

cmake运行良好,然后我运行make。与OpenCV版本和gcc版本的组合无关,结果是一样的:

In file included from /usr/local/include/c++/6.2.0/bits/stl_algo.h:59:0,
                 from /usr/local/include/c++/6.2.0/algorithm:62,
                 from /home/dmelo/proj2/opencv/modules/core/include/opencv2/core/base.hpp:55,
                 from /home/dmelo/proj2/opencv/modules/core/include/opencv2/core.hpp:54,
                 from /home/dmelo/proj2/opencv/modules/highgui/include/opencv2/highgui.hpp:46,
                 from /home/dmelo/proj2/opencv/build/modules/highgui/precomp.hpp:45:
/usr/local/include/c++/6.2.0/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
 #include_next <stdlib.h>
                         ^
compilation terminated.

还有其他人遇到这种情况吗?我该如何解决这个问题?

5 个答案:

答案 0 :(得分:43)

尝试通过cmake-gui或使用命令行参数禁用预编译的头文件

-DENABLE_PRECOMPILED_HEADERS=OFF

答案 1 :(得分:4)

从zip包编译(opencv-2.4.11)对我来说不起作用 来自github repo的最新版本*在ubuntu 17.04上成功构建了

git clone https://github.com/opencv/opencv.git
cd opencv
mkdir mybin
cd mybin
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_FFMPEG=OFF ..
make
sudo make install

更新:您可能希望在git checkout 3.4之后执行git clone,因为自我写这篇文章以来,主分支有许多新的更改

注意:ffmpeg已弃用且可选,因此我使用了WITH_FFMPEG=OFF标志
更新:我可以在18.04使用ffmpeg构建,使用WITH_FFMPEG=ON标志。最新的ffmpeg也适用于17.04。如果你成功了,请评论下来!

* OpenCV提交ID cca99bf8249387da9f79be8d549b2d49e39a0289

其他信息: 我在编译之前安装的依赖项 -

build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libtbb2 libtbb-dev

希望这有助于将来的某个人!

答案 2 :(得分:1)

对我来说

SELECT min(a.timecol), a.datecol, a.daycol FROM `timetable` a 
  WHERE a.datecol = (
      SELECT min(b.datecol) from `timetable` b
  )

来自here的提示“仅编辑CMakeFiles / Transform360.dir / includes_CXX.rsp并将-isystem替换为-I”提示

答案 3 :(得分:0)

我在Manjaro Linux上,由于TBBConfig.cmake文件是Intel-TBB库的一部分,并且包含对include文件夹路径的修改,因此该问题确实存在于我的系统上56:

set_target_properties(TBB::${_tbb_component} PROPERTIES
                                  INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/../../../include")

在我看来,-DENABLE_PRECOMPILED_HEADERS=OFF已经关闭并且无法解决问题,看来该标志-DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON已解决了这个问题。

答案 4 :(得分:0)

对于像Manjaro这样的archlinux发行版,标志-D ENABLE_PRECOMPILED_HEADERS=OFF-D CMAKE_NO_SYSTEM_FROM_IMPORTED=ON成功地对其进行了修复。

在编译期间,我也遇到了blascblas的问题。 我通过添加cblas链接了CMAKE_EXE_LINKER_FLAGS=-lcblas