Opencv 打开Cv生成错误

Opencv 打开Cv生成错误,opencv,Opencv,我正在尝试安装opencv 3.0.0版。我以前安装过2.4版,没有错误,但是3.0版给我带来了很多麻烦。我的make命令总是出错。这是日志 [ 23%] Built target pch_Generate_opencv_videoio Scanning dependencies of target opencv_videoio [ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap

我正在尝试安装opencv 3.0.0版。我以前安装过2.4版,没有错误,但是3.0版给我带来了很多麻烦。我的make命令总是出错。这是日志

[ 23%] Built target pch_Generate_opencv_videoio
Scanning dependencies of target opencv_videoio
[ 23%] Building CXX object     modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_images.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_encoder.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_gstreamer.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_v4l.cpp.o
[ 23%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_gphoto2.cpp.o
usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp: In member function âvoid cv::gphoto2::DigitalCameraCapture::initContext()â:
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:325:66: error: invalid conversion from âvoid (*)(GPContext*, const char*, void*) {aka void (*)(_GPContext*, const char*, void*)}â to âGPContextErrorFunc {aka void (*)(_GPContext*, const char*, __va_list_tag*, void*)}â [-fpermissive]
 gp_context_set_error_func(context, ctxErrorFunc, (void*) this);
                                                              ^
In file included from /usr/include/gphoto2/gphoto2-abilities-list.h:28:0,
             from /usr/include/gphoto2/gphoto2-library.h:28,
             from /usr/include/gphoto2/gphoto2.h:49,
             from /usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2-context.h:113:6: error:   initializing argument 2 of âvoid gp_context_set_error_func(GPContext*, GPContextErrorFunc, void*)â [-fpermissive]
 void gp_context_set_error_func     (GPContext *context,
  ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:326:68: error: invalid conversion from âvoid (*)(GPContext*, const char*, void*) {aka void (*)(_GPContext*, const char*, void*)}â to âGPContextStatusFunc {aka void (*)(_GPContext*, const char*, __va_list_tag*, void*)}â [-fpermissive]
 gp_context_set_status_func(context, ctxStatusFunc, (void*) this);
                                                                ^
In file included from /usr/include/gphoto2/gphoto2-abilities-list.h:28:0,
             from /usr/include/gphoto2/gphoto2-library.h:28,
             from /usr/include/gphoto2/gphoto2.h:49,
             from /usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2-context.h:115:6: error:   initializing argument 2 of âvoid gp_context_set_status_func(GPContext*, GPContextStatusFunc, void*)â [-fpermissive]
void gp_context_set_status_func    (GPContext *context,
  ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:327:70: error: invalid conversion from âvoid (*)(GPContext*, const char*, void*) {aka void (*)(_GPContext*, const char*, void*)}â to âGPContextMessageFunc {aka void (*)(_GPContext*, const char*, __va_list_tag*, void*)}â [-fpermissive]
 gp_context_set_message_func(context, ctxMessageFunc, (void*) this);
                                                                  ^
In file included from /usr/include/gphoto2/gphoto2-abilities-list.h:28:0,
             from /usr/include/gphoto2/gphoto2-library.h:28,
             from /usr/include/gphoto2/gphoto2.h:49,
             from /usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2-context.h:121:6: error:   initializing argument 2 of âvoid gp_context_set_message_func(GPContext*, GPContextMessageFunc, void*)â [-fpermissive]
void gp_context_set_message_func   (GPContext *context,
  ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:341:52: error: âgp_camera_autodetectâ was not declared in this scope
     CR(gp_camera_autodetect(allDevices, context));
                                                ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:250:27: note: in definition of macro âCRâ
 if ((r_0629c47b758 = (GPHOTO2_FUN)) < GP_OK) {\
                       ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp: In member function âint cv::gphoto2::DigitalCameraCapture::widgetDescription(std::ostream&, CameraWidget*) constâ:
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:1036:48: error: âgp_widget_get_readonlyâ was not declared in this scope
 CR(gp_widget_get_readonly(widget, &readonly));
                                            ^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:250:27: note: in definition of macro âCRâ
 if ((r_0629c47b758 = (GPHOTO2_FUN)) < GP_OK) {\
                       ^
make[2]: ***    [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_gphoto2.cpp.o] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
[23%]构建目标pch\u生成\u opencv\u视频IO
扫描目标opencv\u videoio的依赖项
[23%]构建CXX对象模块/videoio/cmakfiles/opencv\u videoio.dir/src/cap.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv\u videoio.dir/src/cap\u images.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv_videoio.dir/src/cap_mjpeg_encoder.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv\u videoio.dir/src/cap\u gstreamer.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv\u videoio.dir/src/cap\u v4l.cpp.o
[23%]构建CXX对象模块/videoio/cmakfiles/opencv_videoio.dir/src/cap_gphoto2.cpp.o
usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:在成员函数中–void cv::gphoto2::DigitalCameraCapture::initContext()–中:
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:325:66:错误:从–void(*)的无效转换(GPContext*,const char*,void*){aka void(*)(GPContext*,const char*,void*)}到–GPContextErrorFunc{aka void(*)(GPContext*,const char*,const char*,ovi*,void*))的无效转换
gp_context_set_error_func(context,ctxErrorFunc,(void*)this);
^
在/usr/include/gphoto2/gphoto2能力列表中包含的文件中。h:28:0,
来自/usr/include/gphoto2/gphoto2库。h:28,
from/usr/include/gphoto2/gphoto2.h:49,
来自/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2 context.h:113:6:错误:初始化-void gp\u context\u set\u error\u func(GPContext*,GPContextErrorFunc,void*)的参数2-[-fppermissive]
void gp\u context\u set\u error\u func(GPContext*context,
^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:326:68:错误:从–void(*)的无效转换(GPContext*,const char*,void*){aka void(*)(GPContext*,const char*,void*)}到–GPContextStatusFunc{aka void(*)(GPContext*,const char*,const char*,auva列表标签*,void*)-fpermissive[-fpermissive]
gp_context_set_status_func(context,ctxStatusFunc,(void*)this);
^
在/usr/include/gphoto2/gphoto2能力列表中包含的文件中。h:28:0,
来自/usr/include/gphoto2/gphoto2库。h:28,
from/usr/include/gphoto2/gphoto2.h:49,
来自/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2 context.h:115:6:错误:初始化-void gp\u context\u set\u status\u func(GPContext*,GPContextStatusFunc,void*)的参数2-[-fpermissive]
void gp\u context\u set\u status\u func(GPContext*context,
^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:327:70:错误:从–void(*)的无效转换(GPContext*,const char*,void*){aka void(*)(GPContext*,const char*,void*)}到–GPContextMessageFunc{aka void(*)(GPContext*,const char*,const char*,auva列表标签*,void*)fpermissive[-fpermissive]
gp_context_set_message_func(context,ctxMessageFunc,(void*)this);
^
在/usr/include/gphoto2/gphoto2能力列表中包含的文件中。h:28:0,
来自/usr/include/gphoto2/gphoto2库。h:28,
from/usr/include/gphoto2/gphoto2.h:49,
来自/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:32:
/usr/include/gphoto2/gphoto2 context.h:121:6:错误:初始化-void gp\u context\u set\u message\u func(GPContext*,GPContextMessageFunc,void*)的参数2-[-fpermissive]
void gp\u context\u set\u message\u func(GPContext*context,
^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:341:52:错误:未在此范围内声明“gp_camera_autodetect”
CR(gp_摄像头_自动检测(所有设备,上下文));
^
/usr/local/src/opencv/opencv-3.0.0/modules/videoio/src/cap_gphoto2.cpp:250:27:注意:在宏–CR–的定义中
如果((r_0629c47b758=(GPHOTO2_FUN))

知道哪里出了问题吗?

ctxMessageFunc/ctxStatusFunc/ctxMessageFunc
的OpenCV声明与gphoto2中定义的参数列表不同

将代码修改为

friend void ctxErrorFunc(GPContext *, const char *, va_list args, void *);
friend void ctxStatusFunc(GPContext *, const char *, va_list args, void *);
friend void ctxMessageFunc(GPContext *, const char *, va_list args, void *);
并应用下面相同的更改


尽管如此,还有其他“函数缺失”问题,我只是将它们注释掉以通过编译阶段模块,最好获得兼容版本的gphoto2。

ctxMessageFunc/ctxStatusFunc/ctxMessageFunc的OpenCV声明与gphoto2中定义的参数列表不同

将代码修改为

friend void ctxErrorFunc(GPContext *, const char *, va_list args, void *);
friend void ctxStatusFunc(GPContext *, const char *, va_list args, void *);
friend void ctxMessageFunc(GPContext *, const char *, va_list args, void *);
并应用下面相同的更改

尽管如此,还有其他原因
include /usr/local/lib