为了跑GSLAM,一直遇到opencv版本的问题,本机之前是4.1.0,作者回答用的版本是opencv2.4.9,没办法,再装一个。
最终我的CMAKE指令:
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv/2.4.9 -D WITH_TBB=ON -D WITH_OPENMP=ON -D WITH_IPP=ON -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 -D WITH_FFMPEG=OFF -D WITH_CUDA=OFF ..
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
FIX:
https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound
缺少xxx.h文件安装方法——————到/usr/include/目录下面查找类似的文件
下面是两个例子(前提是安装好相关依赖包,根据缺少的.h文件寻找需要的包)
例1:缺少videodev.h————linux/videodev.h not found
例2:缺少videoio.h————sys/videoio.h not found
FIX:https://blog.csdn.net/xbs150/article/details/77840786
[ 3%] Building NVCC (Device) object src/thundersvm/CMakeFiles/thundersvm.dir/kernel/thundersvm_generated_smo_kernel.cu.o
In file included from /usr/local/cuda/include/host_config.h:50:0,
from /usr/local/cuda/include/cuda_runtime.h:78,
from :0:
/usr/local/cuda/include/crt/host_config.h:121:2: error: #error -- unsupported GNU version! gcc versions later than 6 are not supported!
#error -- unsupported GNU version! gcc versions later than 6 are not supported!
^~~~~
FIX:
CMAKE 指定GCC版本
-D CMAKE_C_COMPILER=gcc-6 -D CMAKE_CXX_COMPILER=g++-6
In file included from /home/kunb/slam_code/opencv-2.4.9/modules/highgui/src/cap_ffmpeg_impl.hpp:60:0,
from /home/kunb/slam_code/opencv-2.4.9/modules/highgui/src/cap_ffmpeg.cpp:45:
/home/kunb/slam_code/opencv-2.4.9/modules/highgui/src/ffmpeg_codecs.hpp:104:7: error: ‘CODEC_ID_H264’ was not declared in this scope
{ CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
^~~~~~~~~~~~~
/home/kunb/slam_code/opencv-2.4.9/modules/highgui/src/ffmpeg_codecs.hpp:105:7: error: ‘CODEC_ID_H264’ was not declared in this scope
{ CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
^~~~~~~~~~~~~
/home/kunb/slam_code/opencv-2.4.9/modules/highgui/src/ffmpeg_codecs.hpp:106:7: error: ‘CODEC_ID_H264’ was not declared in this scope
{ CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
(后面太长,不贴了)
FIX:
CMAKE直接关闭ffmpeg
-D WITH_FFMPEG=OFF
关闭此项不会对提取视频文件产生影响,具体见https://github.com/opencv/opencv/pull/4107
本来想用cuda的,但是这迫不得已,时间有限,还是关了吧
modules/gpu/CMakeFiles/opencv_gpu.dir/build.make:1604: recipe for target 'modules/gpu/CMakeFiles/cuda_compile.dir/src/nvidia/core/cuda_compile_generated_NCVPyramid.cu.o' failed
make[2]: *** [modules/gpu/CMakeFiles/cuda_compile.dir/src/nvidia/core/cuda_compile_generated_NCVPyramid.cu.o] Error 1
make[2]: 离开目录“/home/kunb/slam_code/opencv-2.4.9/build”
CMakeFiles/Makefile2:1477: recipe for target 'modules/gpu/CMakeFiles/opencv_gpu.dir/all' failed
make[1]: *** [modules/gpu/CMakeFiles/opencv_gpu.dir/all] Error 2
make[1]: 离开目录“/home/kunb/slam_code/opencv-2.4.9/build”
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
FIX:
-D WITH_CUDA=OFF
cc1plus: some warnings being treated as errors modules/contrib/CMakeFiles/opencv_contrib.dir/build.make:158: recipe for target 'modules/contrib/CMakeFiles/opencv_contrib.dir/src/chamfermatching.cpp.o' failed
这个问题在https://github.com/opencv/opencv/issues/6517中,提问者的解决方法是更改到2.4.12.2,他参考的是https://github.com/opencv/opencv/pull/5674
不过都到这里了,不想再重新下代码什么的走一遍,我直接替换了chamfermatching.cpp文件,然后继续编译
https://github.com/opencv/opencv/blob/eebd4cad665f4f1270ca58bb13e9708e130f9b30/modules/contrib/src/chamfermatching.cpp
FIX:
从上面网址获取chamfermatching.cpp,替换