最近在linux下编译opencv遇到一个问题,不能支持opencv。
按照网上的说法,只需要在运行cmake
时,加入-D WITH_OPENGL=ON
就行。但丝毫没有效果。
下面是cmake
的输出
-- GUI:
-- QT: NO
-- GTK+ 3.x: YES (ver 3.10.8)
-- GThread : YES (ver 2.40.2)
-- GtkGlExt: NO
-- OpenGL support: NO
-- VTK support: NO
gtkglext这个库也安装了,但提示是NO。
看了一下opencv的cmake配置文件cmake/OpenCVFindLibsGUI.cmake
,发现下面一段逻辑:
...
ocv_clear_vars(HAVE_GTK HAVE_GTK3 HAVE_GTHREAD HAVE_GTKGLEXT)
if(WITH_GTK AND NOT HAVE_QT)
if(NOT WITH_GTK_2_X)
CHECK_MODULE(gtk+-3.0 HAVE_GTK3)
if(HAVE_GTK3)
set(HAVE_GTK TRUE)
...
if(NOT HAVE_GTK)
CHECK_MODULE(gtk+-2.0 HAVE_GTK)
...
if(WITH_OPENGL AND NOT HAVE_GTK3)
CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
endif()
endif()
# --- OpenGl ---
ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL)
if(WITH_OPENGL)
if(WITH_WIN32UI OR (HAVE_QT AND QT_QTOPENGL_FOUND) OR HAVE_GTKGLEXT)
find_package (OpenGL QUIET)
if(OPENGL_FOUND)
set(HAVE_OPENGL TRUE)
...
endif(WITH_OPENGL)
原来是机器里装了gtk3,所以HAVE_GTKGLEXT==FALSE
,机器里恰巧又没有QT,所以没有去检查OpenGL项目。
看来是gtk3与gtkglext不兼容,为了支持opengl,只能使用gtk2了。在cmake的时候,再增加一个选项-D WITH_GTK_2_X=ON
就OK了。下面是cmake的输出结果:
$ cmake -D WITH_GTK_2_X=ON -D WITH_OPENGL=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTLL_PREFIX=/usr/local ..
...
-- GUI:
-- QT: NO
-- GTK+ 2.x: YES (ver 2.24.23)
-- GThread : YES (ver 2.40.2)
-- GtkGlExt: YES (ver 1.2.0)
-- OpenGL support: YES (/usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libSM.so /usr/lib/x86_64-linux-gnu/libICE.so /usr/lib/x86_64-linux-gnu/libX11.so /usr/lib/x86_64-linux-gnu/libXext.so)
-- VTK support: NO
...