OpenCV编译错误:/usr/include/c++/5/bits/stl_algobase.h:604:58: ...

文章目录

  • 错误描述
  • 原因分析

环境:Ubuntu16.04
工具:Eclipse + cdt
opencv 4.0.0

错误描述

编写好的正常代码,在Build Project过程中出现类似于“标准库”错误:

/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/seam_finders.hpp:250:29: error: field ‘impl_’ has incomplete type ‘cv::Ptr’
     Ptr impl_;
                             ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:53:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:108:30: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void prepare(Rect dst_roi) CV_OVERRIDE;
                              ^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:109:56: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void feed(InputArray img, InputArray mask, Point tl) CV_OVERRIDE;
                                                        ^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:110:63: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void blend(InputOutputArray dst, InputOutputArray dst_mask) CV_OVERRIDE;
                                                               ^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:135:30: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void prepare(Rect dst_roi) CV_OVERRIDE;
                              ^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:136:56: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void feed(InputArray img, InputArray mask, Point tl) CV_OVERRIDE;
                                                        ^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:137:63: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
     void blend(InputOutputArray dst, InputOutputArray dst_mask) CV_OVERRIDE;
                                                               ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:145:12: error: ‘constexpr’ does not name a type
     static constexpr const double ORIG_RESOL = -1.0;
            ^
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:145:12: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:292:20: error: field ‘features_finder_’ has incomplete type ‘cv::Ptr’
     Ptr features_finder_;
                    ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:293:34: error: field ‘features_matcher_’ has incomplete type ‘cv::Ptr’
     Ptr features_matcher_;
                                  ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:295:37: error: field ‘bundle_adjuster_’ has incomplete type ‘cv::Ptr’
     Ptr bundle_adjuster_;
                                     ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:296:28: error: field ‘estimator_’ has incomplete type ‘cv::Ptr’
     Ptr estimator_;
                            ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:299:24: error: field ‘warper_’ has incomplete type ‘cv::Ptr’
     Ptr warper_;
                        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
 struct Ptr : public std::shared_ptr
        ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:300:38: error: field ‘exposure_comp_’ has incomplete type ‘cv::Ptr’
     Ptr exposure_comp_;
                                      ^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
                 from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
                   ^
...

In file included from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:58:0,
                 from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
                 from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/types.hpp:1852:13: note: candidate: cv::Rect_<_Tp>& cv::Rect_<_Tp>::operator=(const cv::Rect_<_Tp>&) [with _Tp = int]
 Rect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r )
             ^
/usr/local/opencv4/include/opencv4/opencv2/core/types.hpp:1862:13: note: candidate: cv::Rect_<_Tp>& cv::Rect_<_Tp>::operator=(cv::Rect_<_Tp>) [with _Tp = int]
 Rect_<_Tp>& Rect_<_Tp>::operator = ( Rect_<_Tp>&& r ) CV_NOEXCEPT
             ^
make: *** [src/testcv.o] Error 1

16:32:01 Build Finished (took 1s.585ms)

原因分析

Opencv 4.0需要C++11特性支持,所以必须对项目设置:
OpenCV编译错误:/usr/include/c++/5/bits/stl_algobase.h:604:58: ..._第1张图片
之后即可正常编译。

补充:如果正常gcc命令行编译出现相同错误,应使用:
g++ -c -std=c++11 -I/usr/loca/opencv4/include/opencv4 xxx.cpp
这里opencv的include路径根据各自环境调整。

你可能感兴趣的:(CV,Eclipse)