GTK版WebKit编译详细步骤

GTK版WebKit编译步骤

1. 环境准备

  1. linux操作系统,我用的Ubantu 14.04;
  2. 必须可以上网;
  3. 执行以下命令安装必要工具:

    sudo apt-get install git-core build-essential autoreconf*

  4. 安装openGL:

    sudo apt-get install freeglut3-dev
    sudo apt-get install libgl1-mesa-dev
    sudo apt-get install freeglut3-dev

  5. 升级gcc版本,WebKit一般都使用比较新的gcc,ubuntu默认安装的gcc版本可能不合适,需要升级:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install gcc-5 //我装了5.0版本,你得看需要了

ps:
1.步骤5执行后你实际上还需要使用apt-get update-alternatives去更换默认的gcc才可以,但是我编译webkit的前一天ubuntu自动给我升级了gcc所以我没有手动升级.你也可以先编译一下看看,如果提示gcc版本太低在升级也不迟.

2.如果你的gcc版本已经足够新,但编译时依然提示你gcc的版本太老,试着删除WebKitBuild/Release(或Debug)/目录下的CMakeCache.txt 和CMakeFiles文件夹,再重新编译试一试。

2. 获取WebKit源代码

有两种方式获取WebKit的源代码:
1.从官方网站www.webkit.org下载压缩包解压;
2.从webkit的git托管中克隆;

我选择了第二种方式,命令为:

git clone git://git.webkit.org/WebKit.git WebKit

执行此命令后,会在当前目录创建一个WebKit文件夹。

3. 安装WebKit依赖库

WebKit提供了脚本方便依赖库的安装:

./WebKit/Tools/gtk/install-dependencies
./WebKit/Tools/Script/update-webkitgtk-libs

ps:执行第二个命令要注意不能在root账号下,第二个命令实际上是下载jhbuild编译工具编译gnome环境.

4.编译WebKit源码

执行以下命令即可:

./WebKit/Tools/Script/build-webkit –gtk –debug

5.编译过程中遇到的问题

1.

../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:37:20: fatal error: hb-icu.h: No such file or directory
#include < hb-icu.h >
^
compilation terminated.

解决方法:将HarfBuzzShaper.cpp文件的37行#include < hb-icu.h >改为#include < harfbuzz/hb-icu.h >.你可以搜索一下/usr/include目录hb-icu.h就在这个目录下.

2.

Linking CXX shared library lib/libwebkit2gtk-4.0.so.37.10.0
FAILED: : && /usr/bin/c++ -fPIC -std=c++11 -gsplit-dwarf -std=c++11 -gsplit-dwarf -g -Wl,–no-undefined -L/home/jh/WebKitGTK/WebKit/WebKitBuild/DependenciesGTK/Root/lib64 -fuse-ld=gold -Wl,–disable-new-dtags -Wl,–gdb-index -Wl,–gdb-index -Wl,–no-keep-memory -shared -Wl,-soname,libwebkit2gtk-4.0.so.37 -o lib/libwebkit2gtk-4.0.so.37.10.0 @CMakeFiles/WebKit2.rsp && :
../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:452: error: undefined reference to ‘hb_icu_script_to_script’
../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:465: error: undefined reference to ‘hb_icu_get_unicode_funcs’
collect2: error: ld returned 1 exit status

解决方法:打开 WebKitGTK/WebKit/WebKitBuild/Debug/build.ninja
找到

POST_BUILD = :
PRE_LINK = :
SONAME = libwebkit2gtk-4.0.so.37
SONAME_FLAG = -Wl,-soname,
TARGET_PDB = webkit2gtk-4.0.so.dbg
LINK_FLAGS = -Wl,–no-undefined -L/home/jh/WebKitGTK/WebKit/WebKitBuild/DependenciesGTK/Root/lib64 -fuse-ld=gold -Wl,–disable-new-dtags -Wl,- -gdb-index -Wl,–gdb-index -Wl,–no-keep-memory

在–no-keep-memory后面加入-lharfbuzz-icu,然后重新编译。问题的原因实际上是harfbuzz将原来的一个libharfbuzz库变为了libharfbuzz和libharfbuzz-icu两个库,webkit官方在2013年就发现了问题,不知为何一直没有修复。

3.

Linking CXX executable bin/WebKitPluginProcess2
FAILED: : && /usr/bin/c++ -std=c++11 -gsplit-dwarf -g -L/home/jh/WebKitGTK/WebKit/WebKitBuild/DependenciesGTK/Root/lib64 -fuse-ld=gold -Wl,–disable-new-dtags -Wl,–gdb-index @CMakeFiles/WebKitPluginProcess2.rsp -o bin/WebKitPluginProcess2 && :
../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:452: error: undefined reference to ‘hb_icu_script_to_script’
../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:465: error: undefined reference to ‘hb_icu_get_unicode_funcs’
collect2: error: ld returned 1 exit status

原因与问题2类似。解决方法:
找到:

build bin/WebKitPluginProcess2:……(太长了省略)
FLAGS = -std=c++11 -gsplit-dwarf -g
LINK_FLAGS = -L/home/jh/WebKitGTK/WebKit/WebKitBuild/DependenciesGTK/Root/lib64 -fuse-ld=gold -Wl,–disable-new-dtags -Wl,–gdb-index

在-gdb-index后面加入-lharfbuzz-icu。
再找到

TARGET_PDB = WebKitPluginProcess2.dbg
29197 FLAGS = -std=c++11 -gsplit-dwarf -g
29198 LINK_FLAGS = -L/home/jh/WebKitGTK/WebKit/WebKitBuild/DependenciesGTK/Root/lib64 -fuse-ld=gold -Wl,–disable-new-dtags -Wl,–gdb-index

在-gdb-index后面加入-lharfbuzz-icu。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值