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