当前位置:   article > 正文

记录ubuntu下编译openCV4 + cuda + python3 踩坑(C++11 python相关报错)_error: #error "opencv 4.x+ requires enabled c++11

error: #error "opencv 4.x+ requires enabled c++11 support


前言

ubuntu下编译 openCV4 遇到了几个问题,记录一下:
特别提示CMake 参数一定要带上

 -D OPENCV_ENABLE_NONFREE=ON 
配置完参数必须要检查一下输出的信息
确认  NON-free algorithms YES
  • 1
  • 2
  • 3

此选项的作用是使用没有版权的算法。例如 SURF SIFT

编译openCV4 需要做的准备工作可以参考下面的链接:

Jetson Nano编译安装带cuda的opencv4.x 和opencv_contrib4.x


一、python include lib相关的设置报错

‘PyObject {aka struct _object}’ has no member named ‘v’
  • 1

这个主要原因是cmake 参数需要设置 python3的include lib exec 路径(具体要按照实际安装的python版本去填写)

-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8
-D OPENCV_PYTHON3_VERSION=3.8
-D PYTHON3_INCLUDE_PATH=/usr/include/python3.8
-D PYTHON3_LIBRARIES=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so
-D PYTHON3_EXECUTABLE=/usr/bin/python3.8
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/

二、C++11 support报错

opencv4.x/modules/core/include/opencv2/core/cvdef.h:775:4: error: #error "OpenCV 4.x+ requires enabled C++11 support"

尝试方法一:这个网上大量的发帖说是要 添加 -std=c++11

我也反复试了添加

-D CMAKE_CXX_FLAGS="-std=c++11"
  • 1

但是没有问题没有得到解决

尝试方法二:在 opencv-4.x/build/CMakeLists.txt 里面添加

# 设置指定的C++编译器版本是必须的,如果不设置,或者为OFF,则指定版本不可用时,会使用上一版本。
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 指定为C++11 版本
set(CMAKE_CXX_STANDARD 11)
  • 1
  • 2
  • 3
  • 4
  • 5

依然相同的报错

尝试方法三:修改 makefile里面的g++ flags

文章链接 :添加c++11标准的支持
g++ fopenmp -o ${TARGET} &{OBJECTS} -I ${INCLUDE} ${LIBS} -std=c++11

我在我自己的 opencv-4.x/build/makefile 文件里面没有找到可以修改 g++的地方,放弃了

最后成功的方法

后来偶然在一篇文章中看到可以单独设置 CUDA_NVCC_FLAGS
-D CMAKE_CXX_FLAGS="-std=c++11" 基础上添加

-D CUDA_NVCC_FLAGS="--compiler-options "-std=c++11""
  • 1

总算是编译通过了。

目录说明

在opencv-4.x 目录下 新建build目录,将解压出的 opencv_contrib-4.x 放在opencv-4.x 目录下,或者在编译设置里面 OPENCV_EXTRA_MODULES_PATH 值填绝对路径

总结

最后的编译参数是

cmake 
-D WITH_CUDA=ON 
-D CUDA_ARCH_BIN="5.3" 
-D CUDA_ARCH_PTX="" 
-D OPENCV_ENABLE_NONFREE=ON 
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.x/modules 
-D WITH_GSTREAMER=ON 
-D WITH_LIBV4L=ON 
-D WITH_QT=ON 
-D WITH_OPENGL=ON 
-D BUILD_TESTS=OFF 
-D BUILD_PERF_TESTS=OFF 
-D BUILD_EXAMPLES=ON 
-D CMAKE_BUILD_TYPE=RELEASE 
-D CMAKE_INSTALL_PREFIX=/usr/local 
-D OPENCV_GENERATE_PKGCONFIG=ON
==========================python相关的设置默认会自动查找路径,无需写===============
-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.8 
-D OPENCV_PYTHON3_VERSION=3.8 
-D PYTHON3_INCLUDE_PATH=/usr/include/python3.8 
-D PYTHON3_LIBRARIES=/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so 
-D PYTHON3_EXECUTABLE=/usr/bin/python3.8 
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/  
========================================================
-D CMAKE_CXX_FLAGS="-std=c++11" 
-D CUDA_NVCC_FLAGS="--compiler-options "-std=c++11"" 
..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

make -j8 完成后

sudo make install 
  • 1
-- Installing: /usr/local/bin/opencv_visualisation
-- Set runtime path of "/usr/local/bin/opencv_visualisation" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_interactive-calibration
-- Set runtime path of "/usr/local/bin/opencv_interactive-calibration" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_version
-- Set runtime path of "/usr/local/bin/opencv_version" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
-- Installing: /usr/local/bin/opencv_model_diagnostics
-- Set runtime path of "/usr/local/bin/opencv_model_diagnostics" to "/usr/local/lib:/usr/local/cuda-10.2/lib64"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Jetson Nano 相关的资料
算力相关参数是 CUDA_ARCH_BIN=“5.3”
CPU是4核的ARM make -j8(减少焦急等待的时间,老板已经在问编好没有了)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/864713
推荐阅读
相关标签
  

闽ICP备14008679号