tigervnc 編譯


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM