浏览器内核中,以我对Mozilla Firefox比较熟悉,并为其写过扩展。不过Webkit这几年绝对值得注意,并且在mobile平台上,Webkit比Firefox要成功。
了解开源一个项目,从source build开始。我选择的是webkit-gtk,因为我有个配置良好的ubuntu VM。
帮助页面http://trac.webkit.org/wiki/BuildingGtk,说明了其它库依赖:
- autoconf
- automake
- libtool
- libgtk2.0-dev (>= 2.10)
- libpango1.0-dev (>= 1.16)
- libicu-dev
- libxslt-dev
- libsoup2.4-dev (>= 2.27.4) (*)
- libsqlite3-dev
- gperf
- bison (>= 2.4.1)
- flex
- libjpeg62-dev
- libpng12-dev
- libxt-dev
- autotools-dev
- libgstreamer-plugins-base0.10-dev
- libenchant-dev
- libgail-dev
- libgeoclue-dev
- gtk-doc-tools
直接用apt-get 全部安装。
这一步简单.
再来是构建:
$ ./autogen.sh --prefix=/path/to/install/directory
$ make
出错了,同一页面说明了原因:
(*) Libsoup 2.29.3 tar ball release is missing libsoup/soup-content-decoder.h .
SOUP_TYPE_CONTENT_DECODER is defined in the header file and it will
result in a compilation error: WebKit/gtk/webkit/webkitprivate.cpp:290:
error: 'SOUP_TYPE_CONTENT_DECODER' was not declared in this scope .
libsoup 2.28.2 works.
但是我想,如果自己patch一下,应该更快,不用安装什么旧版本。
所以我自己把
libsoup/soup-content-decoder.h
放到了适当的位置,再把用到decoder的代码删改一下。。
$ ./autogen.sh --prefix=/path/to/install/directory
$ make
$ ./Programs/GtkLauncher
一个简单的Webkit浏览器,就通过XMing显示出来了。。 (Release版前后编译折腾了一两天)
今天中午忽然想用GDB调试,所以加了个参数:
$ ./autogen.sh --prefix=/path/to/install/directory --enable-debug
$ make
结果总是出现:
CXXLD libwebkit-1.0.la
collect2: ld terminated with signal 9 [Killed]
网上一查,是因为内存不足,
学习http://blog.csdn.net/flowingflying/archive/2009/12/01/4915330.aspx中的方法,
加了个2G的swap文件,再make.
四小时多过去,gdb GtkLauncher
b main
r
成功了~~