前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >minigui:解决gvfb编译报错undefined reference to symbol 'XkbGetIndicatorState'

minigui:解决gvfb编译报错undefined reference to symbol 'XkbGetIndicatorState'

作者头像
10km
发布2019-05-25 20:40:23
7250
发布2019-05-25 20:40:23
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433459

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

代码语言:javascript
复制
# 下载
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

然而在编译过程中出错了:

代码语言:javascript
复制
/usr/bin/ld: CMakeFiles/gvfb.dir/gvfb_linux.o: undefined reference to symbol 'XkbGetIndicatorState'

XkbGetIndicatorStateX11这个基础库的函数,显然是cmake脚本写得有问题

打开$gvfb-1.0.0/src/CMakeLists.txt这个脚本,如下:

代码语言:javascript
复制
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

输出如下:

代码语言:javascript
复制
-- 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就解决问题:

代码语言:javascript
复制
TARGET_LINK_LIBRARIES (${PROJECT_NAME} ${linkflags} -lX11)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档