Visual Studio 15编译OpenCV3.4.1+contrib时Aruco模块报错
CV_OVERRIDE错误 我之前也碰到过一模一样的问题,VS2015(也就是你说的Visual Studio 15)编译OpenCV 3.4.1搭配opencv_contrib时,opencv_aruco项目报的'CV_OVERRIDE': unknown override specifier错误,本质是编译器没有启用C++11标准,或者CMake生成项目时没正确传递这个配置。下面是几个亲测有效的解决办法:
检查并修改CMake的C++标准配置
重新运行CMake,在配置界面中找到CMAKE_CXX_STANDARD选项,将其设置为11(VS2015完全支持C11,也可以选14);同时确保CMAKE_CXX_STANDARD_REQUIRED被勾选为ON,强制编译器使用指定的C标准。完成后重新点击Configure和Generate,再打开VS项目编译。直接修改VS项目的编译器选项
如果CMake配置后仍未解决,直接打开生成的VS解决方案:- 找到报错的
opencv_aruco项目,右键选择「属性」 - 转到「配置属性」→「C/C++」→「语言」,将「C++语言标准」设置为
ISO C++11 标准(/std:c++11) - 建议同时修改整个解决方案的默认C++标准,避免其他后续项目出现同类问题
- 找到报错的
验证OpenCV源码中的宏定义(备选方案)
极少数情况下,源码中的CV_OVERRIDE宏可能未正确定义。找到OpenCV主目录下的opencv2/core/cvdef.h文件,搜索CV_OVERRIDE的定义,正常应该是:#if (defined _MSC_VER && _MSC_VER >= 1800) || (defined __GNUC__ && __GNUC__ >= 4 && __GNUC_MINOR__ >= 7) || defined(__clang__) # define CV_OVERRIDE override #else # define CV_OVERRIDE #endifVS2015的
_MSC_VER值是1900,满足>=1800的条件,所以应该会正确映射到override。如果此处有异常,可以手动修改宏定义,直接将CV_OVERRIDE定义为override。禁用重复的aruco模块
你提到重新下载后主库已包含aruco模块,此时要避免重复编译contrib中的同名模块:在CMake配置界面找到BUILD_opencv_aruco选项(来自contrib的那一项),取消勾选,只保留主库自带的aruco模块即可。
这些方法应该能解决你的问题,我当时是通过设置CMake的C++标准成功解决的。
内容的提问来源于stack exchange,提问作者Bradmage

