# 编译OpenCV Contrib SFM模块时报错

# 报错

使用命令:

cmake -DOPENCV_EXTRA_MODULES_PATH=opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG_INFO=YES -DCMAKE_INSTALL_PREFIX=XXX -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_ENABLE_NOFREE=ON ..

编译OpenCV Contrib模块时,对应版本是OpenCV 4.2.091%时还报错如下:

Build error ‘integer_sequence’ is not a member of ‘std’

# 原因分析

这是因为OpenCV contrib中的SFM使用CERES库,而CERES库中使用了C++14的标准,因此在编译的时候会报错,了解C++新标准的话很容易发现类integer_sequenceC++14标准中引入的。

# 解决办法

一个办法是改变SFM模块编译使用的c++标准,找到

opencv_contrib/modules/sfm/src/libmv_light/libmv/multiview/CMakeLists.txt

文件,在其中加入:

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

然后重新执行上面的cmake命令后,重新编译即可。

(adsbygoogle = window.adsbygoogle || []).push({});

# reference