1.根据BUILDING.txt安装依赖(建议使用默认路径)
其中X11 development kit使用
yum install libX11*
2.修改CMakeList.txt
在前面添加
set(FLTK_BASE_LIBRARY "/usr/local/lib/libfltk.so") set(FLTK_IMAGES_LIBRARY "/usr/local/lib/libfltk_images.so") set(FLTK_INCLUDE_DIR "/usr/local/include/")
3.生成目标
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -Wno-dev
make
sudo make install
编译时可能会出现符号链接的问题,建议将依赖生成为动态链接文件。
如果使用64位环境编译,可能某些依赖库会只生成了32位链接库文件,所以会出现符号找不到的情况。
我使用 tigervnc-1.6.0版本编译通过,建议使用该版本,不同版本具体情况可能不同。
4.运行
我的server端只用到了x0vncserver
由于编译时没有添加TLS,所以服务端开启为:
x0vncserver SecurityTypes=None PasswordFile=/home/yang/.vnc/passwd
如果没有添加
SecurityTypes=None
客户端链接时,回报错:
gnutls_set_priority_direct failed
---------------------------------------------------------------------------------------------------------------------------------------
Xvnc编译
准备包:
xorg-server-1.7.4.tar.gz tigervnc-1.6.0.tar.gz
相关依赖
bigreqsproto-1.1.2.tar.bz2 kbproto-1.0.7.tar.bz2 randrproto-1.5.0.tar.bz2 xextproto-7.3.0.tar.bz2 compositeproto-0.4.tar.bz2 libfontenc-1.1.4.tar.bz2 renderproto-0.11.tar.bz2 xproto-7.0.31.tar.bz2 damageproto-1.2.1.tar.bz2 libpciaccess-0.16.tar.bz2 resourceproto-1.2.0.tar.bz2 xtrans-1.4.0.tar.bz2 fixesproto-5.0.tar.bz2 libXau-1.0.9.tar.bz2 scrnsaverproto-1.2.2.tar.bz2 fontsproto-2.1.3.tar.bz2 libXfont-1.5.4.tar.bz2 videoproto-2.3.3.tar.bz2 inputproto-2.3.tar.bz2 libxkbfile-1.1.0.tar.bz2 xcmiscproto-1.2.2.tar.bz2 util-macros-1.3.0.tar.bz2
(1)安装依赖
BUILDDIR=$(pwd) for package in $(ls ./tar) do packagedir=$(echo ${package} | sed s/.tar.bz2//) tar xf ./tar/${package} -C ./lib cd ./lib/${packagedir} ./configure --prefix=/usr make sudo make install cd ${BUILDDIR} done
(2)合并代码,并打补丁
cd ${tigervnc-source}/unix/xserver cp ${xorg-server-source}/* ./ -R patch -p1 < ../xserver17.patch
其中 xserver.patch 的版本是通过查看 本地的Xorg版本确定,使用下面命令查看Xorg版本
Xorg -version
(3)配置,编译
autoreconf -fiv ./configure --with-pic --without-dtrace --disable-static --disable-dri \ --disable-xinerama --disable-xvfb --disable-xnest --disable-xorg \ --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive \ --disable-config-dbus --disable-config-hal \ --disable-dri2 --enable-install-libxf86config --enable-glx \ --with-default-font-path="catalogue:/etc/X11/fontpath.d,built-ins" \ --with-fontdir=/usr/share/X11/fonts \ --with-xkb-path=/usr/share/X11/xkb \ --with-xkb-output=/var/lib/xkb \ --with-xkb-bin-directory=/usr/bin \ --with-serverconfig-path=/usr/lib/xorg \ --with-dri-driver-path=/usr/lib/dri \ --prefix=/usr
make
出现错误
(1)
vncModule.c: 在函数‘vncModuleInit’中: vncModule.c:94: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
解决
make CFLAGS+=-std=c99
(2)
vncHooks.c: 在函数‘vncHooksCopyArea’中: vncHooks.c:1123: 错误:‘else’之前没有‘if’
解决
将 ./hw/vnc/vncHooks.c +1123 if ((w == 0) || (h == 0)) REGION_NULL(pGC->pScreen, &dst); 修改为 if ((w == 0) || (h == 0)) { \ (&dst)->extents = miEmptyBox; \ (&dst)->data = &miEmptyData; \ }
(3)
Input.c: 在函数‘vncPointerButtonAction’中: Input.c:135: 警告:隐式声明函数‘enqueueEvents’ Input.c: 在文件层: Input.c:197: 警告:与‘enqueueEvents’类型冲突 Input.c:198: 错误:对‘enqueueEvents’的静态声明出现在非静态声明之后 Input.c:135: 附注:‘enqueueEvents’的上一个隐式声明在此
解决
./hw/vnc/Input.c 前面声明 #if XORG < 111 static void enqueueEvents(DeviceIntPtr dev, int n); #endif