minigui在linux PC平台创建开发环境时,需要Virtual Frame Buffer 支持(gvfb,qvfb),minigui官网提供了这两个程序的源码,需要自己下载编译并安装到自己的PC上。
我用的是gvfb,minigui下载地址:http://www.minigui.org/downloads/gvfb-1.0.0.tar.gz
编译安装过程不复杂:
编译需要cmake支持,如果没有请安装:sudo apt-get install cmake
还需要依赖gtk2.0,如果没有请安装:sudo apt-get install libgtk2.0-dev
# 下载
wget http://www.minigui.org/downloads/gvfb-1.0.0.tar.gz
# 解包
tar xvf gvfb-1.0.0.tar.gz
cd gvfb-1.0.0
mkdir build
cd build
# 生成Makefile
cmake ..
# 编译并安装
sudo make install
然而在编译过程中出错了:
/usr/bin/ld: CMakeFiles/gvfb.dir/gvfb_linux.o: undefined reference to symbol 'XkbGetIndicatorState'
XkbGetIndicatorState
是X11
这个基础库的函数,显然是cmake脚本写得有问题
打开$gvfb-1.0.0/src/CMakeLists.txt
这个脚本,如下:
SET (PROJECT_NAME gvfb)
LIST (APPEND SRC_LIST
main.c gvfb_main.c gvfb_view.c gvfb_input.c gvfb_callbacks.c
gvfb_interface.c gvfb_errmsg.c deviceskin.c skin.c)
IF (WIN32)
LIST (APPEND SRC_LIST gvfb_win32.c getopt_long.c)
ELSE ()
LIST (APPEND SRC_LIST gvfb_linux.c)
ENDIF (WIN32)
#pkg-config info
INCLUDE (FindPkgConfig)
PKG_CHECK_MODULES (GTK gtk+-2.0 gthread-2.0)
IF (NOT GTK_FOUND)
MESSAGE(FATAL_ERROR "Gtk+-2.0 not found")
ENDIF (NOT GTK_FOUND)
INCLUDE_DIRECTORIES (${GTK_INCLUDE_DIRS})
LINK_DIRECTORIES (${CMAKE_LIBRARY_PATH} ${GTK_LIBRARY_DIRS})
LIST (APPEND linkflags ${GTK_LIBRARIES})
ADD_EXECUTABLE (${PROJECT_NAME} ${SRC_LIST})
TARGET_LINK_LIBRARIES (${PROJECT_NAME} ${linkflags})
INSTALL (TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
在脚本最后增加一行message(STATUS linkflags=${linkflags})
输出linkflags
变量的值,再执行cmake ..
,可以看出linkflags
中果然是没有-lX11
输出如下:
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for modules 'gtk+-2.0;gthread-2.0'
-- Found gtk+-2.0, version 2.24.30
-- Found gthread-2.0, version 2.48.2
-- linkflags=gtk-x11-2.0gdk-x11-2.0pangocairo-1.0atk-1.0cairogdk_pixbuf-2.0gio-2.0pangoft2-1.0pango-1.0gobject-2.0fontconfigfreetypegthread-2.0glib-2.0
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gyd/Downloads/gvfb-1.0.0/build
确定原因解决问题的办法就很简单了,修改TARGET_LINK_LIBRARIES
这一行,加入-lX11
,重新执行cmake生成Makefile就解决问题:
TARGET_LINK_LIBRARIES (${PROJECT_NAME} ${linkflags} -lX11)