2

我正在尝试从源代码编译 OpenCV 3.4.0,但我遇到了 QT 和 OpenGL 之间冲突的声明问题。从 QT4 升级到 QT5 解决了一些问题,但不是全部。看起来 GLsizeiptr 和 GLintptr 在 OpenGL 头文件和 QT 头文件中都声明了。

我试图更换

#include <GL/glx.h>

#include <GLES3/gl3.h>

在 window_QT.cpp 中,但这只会产生更多的声明问题。

关于如何解决这个问题的任何想法?

(我的机器是运行 Ubuntu 16.04.3 LTS 的 armv7l(Odroid XU4))

我正在运行的 cmake 命令:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_QT=5 -DWITH_OPENGLES=ON -DWITH_V4L=ON -DWITH_TBB=ON -DBUILD_TBB=ON -DENABLE_VFPV3=ON -DENABLE_NEON=ON ..

make -j8

我得到的错误:

[ 62%] Built target opencv_videoio
[ 63%] Built target opencv_superres
[ 63%] Building CXX object 

modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_QT.cpp.o
cc1plus: warning: /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/release/modules/highgui/precomp.hpp.gch/opencv_highgui_RELEASE.gch: not used because `TBB_USE_GCC_BUILTINS' is defined [-Winvalid-pch]
In file included from /usr/include/GL/gl.h:2055:0,
                 from /usr/include/GL/glx.h:32,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.cpp:59:
/usr/include/GL/glext.h:466:19: error: conflicting declaration ‘typedef ptrdiff_t GLsizeiptr’
 typedef ptrdiff_t GLsizeiptr;
                   ^
In file included from /usr/include/arm-linux-gnueabihf/qt5/QtGui/qopengl.h:95:0,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtGui/qopenglcontext.h:54,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtGui/QtGui:32,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtOpenGL/QtOpenGLDepends:4,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtOpenGL/QtOpenGL:3,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.h:50,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.cpp:47:
/usr/include/GLES3/gl31.h:77:25: note: previous declaration as ‘typedef khronos_ssize_t GLsizeiptr’
 typedef khronos_ssize_t GLsizeiptr;
                         ^
In file included from /usr/include/GL/gl.h:2055:0,
                 from /usr/include/GL/glx.h:32,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.cpp:59:
/usr/include/GL/glext.h:467:19: error: conflicting declaration ‘typedef ptrdiff_t GLintptr’
 typedef ptrdiff_t GLintptr;
                   ^
In file included from /usr/include/arm-linux-gnueabihf/qt5/QtGui/qopengl.h:95:0,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtGui/qopenglcontext.h:54,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtGui/QtGui:32,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtOpenGL/QtOpenGLDepends:4,
                 from /usr/include/arm-linux-gnueabihf/qt5/QtOpenGL/QtOpenGL:3,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.h:50,
                 from /home/odroid/temporary_cmake_binary_dir/opencv-3.4.0/modules/highgui/src/window_QT.cpp:47:
/usr/include/GLES3/gl31.h:78:26: note: previous declaration as ‘typedef khronos_intptr_t GLintptr’
 typedef khronos_intptr_t GLintptr;
                          ^
[ 63%] Built target gen_opencv_python_source
modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:129: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_QT.cpp.o' failed
make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_QT.cpp.o] Error 1
CMakeFiles/Makefile2:5307: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

谢谢您的帮助!

4

1 回答 1

1

问题已解决:我刚刚尝试使用直接从 github 克隆的最新版本的 opencv 进行全新安装,并且安装过程完美无缺。

于 2018-02-27T01:52:00.117 回答