Ubuntu 16.04編譯opencv-3.2.0時(shí)出現(xiàn)如下錯(cuò)誤:
[ 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已經(jīng)吧stdlib.h納入了libstdc++以進(jìn)行更好的優(yōu)化,C Library的頭文件stdlib.h使用 Include_next,而include_next對(duì)gcc系統(tǒng)頭文件路徑很敏感潮剪。
推薦的修復(fù)方法是不要把include路徑作為系統(tǒng)目錄丈氓,而是使用標(biāo)準(zhǔn)方式包含include 目錄
解決方法:
在編譯opecv-3.2.0時(shí)嗤疯,加入如下選項(xiàng):
-DENABLE_PRECOMPILED_HEADERS=OFF