我正在尝试安装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你知道哪里出了问题吗?
发布于 2016-02-27 03:33:57
我通过从源代码安装libgphoto2-2.5.7和gphoto2-2.5.6修复了类似的问题。
我找到了对我有帮助的this post,说明书归结为(但是使用make -j4来加速!):
sudo apt-get install libltdl-dev libusb-dev libusb-1.0 libexif-dev libpopt-dev
# compile libgphoto2-2.5.7 from source
tar -xvzf libgphoto2-2.5.7.tar.gz
cd libgphoto2-2.5.7
./configure
make -j4 # use all 4 cores of the raspi!
sudo make install
# compile gphoto2-2.5.6 from source
tar -xvzf gphoto2-2.5.6.tar.gz
cd gphoto2-2.5.6
./configure
make -j4 # again use all 4 cores of the raspi!
sudo make install注意:没有找到这个gphoto2库之后的,所以我不得不添加这一行
include /usr/local/lib添加到文件/etc/ld.so.conf,然后运行ldconfig...
发布于 2016-04-21 17:58:14
两天前,我也遇到了同样的问题,我采用了Dominic提出的解决方案。但不知何故,它仍然是错误的,我post it in my blog。今天,我要再试一次。我使用dpkg --get-selections | grep gphoto来查找我安装的与gphoto相关的内容:
libgphoto2-6:amd64 install
在我移除gphoto2-2.6并安装gphoto2-2.5.7之后,libgphoto2-6仍然在这里。因此,我删除了所有的gphoto,并再次遵循解决方案。在安装gphoto之后,我使用的是sudo ldconfig -v。现在我已经成功构建了openCV 3.1.0~
发布于 2016-02-18 23:43:02
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 *);并应用下面相同的更改。
尽管如此,还有其他“函数缺失”的问题,我只是为了通过编译阶段将它们注释掉。如果你使用的是"videoio“模块,最好是获得一个兼容版本的gphoto2。
https://stackoverflow.com/questions/33020197
复制相似问题