1. 程式人生 > >CEF3在CentOS7.2上編譯、執行

CEF3在CentOS7.2上編譯、執行

1. 前言

CEF 官方提供了Ubuntu的編譯認證,對於CentOS沒有特別說明。 基於最新的二進位制編譯結果進行編譯整合,測試沒啥問題,特此記錄

1.事先準備

發行版映象YUM源

本次實驗對應的版本:

cef_binary_3.3497.1834.g0a87d5f_linux64.tar(本次實驗對應的Chrome 69版本)
nss-3.39-with-nspr-4.20.tar.gz

2.準備補齊依賴

照例是缺什麼補什麼 除了X11標準的執行和DEVEL庫要安裝 這兩個比較冷門的(當然開發環境下對應的devel也需要)也需要安裝

libXScrnSaver-1.2.2-6.1.el7.x86_64.rpm
atk-2.14.0-1.el7.x86_64.rpm

如果有沒列舉到而且導致到時候編譯不過的,可以用repoquery查詢依賴庫

#安裝repoquery
yum install yum-utils
#舉個例子
repoquery --whatprovides libXss.so.1

3.編譯nss和nspr

理論上你拿NSS3.22就可以編譯通過,但實際上有很多JS效果,需要NSS3.26以上才能支撐;版本不足會崩潰。因此推薦下載最新版本編譯安裝

按照官方的說法,你編譯NSS需要準備gyp和ninja,甚為麻煩。這裡給個投機取巧的辦法

先編譯NSPR

cd nspr
./configure --enable-64bit --prefix=/usr
make && make install
#要覆蓋原有的lib64下的檔案
cd dist/lib
cp * /usr/lib64/
cd ..

然後修改 nss/coreconf/Linux.mk,找到這行

OS_CFLAGS               = $(DSO_CFLAGS) $(OS_REL_CFLAGS) $(ARCHFLAG) -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR 

改成

OS_CFLAGS               = $(DSO_CFLAGS) $(OS_REL_CFLAGS) $(ARCHFLAG) -pipe -ffunction-sections -fdata-sections -DHAVE_STRERROR -I/usr/include/nspr

然後就可以愉快的編譯了

cd nss
make USE_64=1
make USE_64=1 install
# 複製相關編譯結果到系統目錄下,方便部署
cd ..
cd dist/Linux3.10_x86_64_cc_glibc_PTH_64_DBG.OBJ
cd lib
\cp -f * /lib64
cd ..
cd bin
\cp -f * /usr/bin/
cd ..

#由於這裡面搭載的sqlite版本較低,因此要復原sqlite
yum reinstall sqlite

執行環境中,如果不想動系統庫,可以把NSPR和NSS編譯結果中的SO放到執行目錄下。

4.編譯CEF

CEF的完整DEMO工程中,cefclient還需要GTK。 這不是必須的,後續我們會講到SDL2配合CEF做透明效果,因此我們就只需要cefsimple能夠正常執行,就算OK了。

make cefsimple

編譯結果在 tests/cefsimple/Release 目錄下。 將前面提到的NSPR和NSS一起放到該目錄下,即可正常執行。

#!/bin/bash
export LD_LIBRARY_PATH=.
export DISPLAY=0:0
./cefsimple --no-sandbox --url="file:/etc/elink.d/splash/splash.html"

備註:

  1. 常用引數
    1. 關閉GPU使用

      --disable-gpu  --disable-gpu-compositing
      
    2. 單程序

      	--single-process
      
    3. 開啟離屏顯示

      	--transparent-painting-enabled --off-screen-rendering-enabled