webkit编译详解Word格式文档下载.docx
《webkit编译详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《webkit编译详解Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。
快速词法分析器发生器
Bison
GNU项目分析器
2.X11+Gtk+WebKit交叉编译详解
编译列表:
Name
Version
libpng
1.2.10
pkg-config
0.23
3.0.3
Tiff
3.8.2
libjpeg
6b
freetype
2.1.10
libxml2
2.6.30
fontconfig
2.4.2
XFree86
4.7.0
glib
2.18.0
atk
1.20.0
cairo
1.2.0
pango
gtk+
2.14.0
ICU
4c-3_6
xslt
1.1.22
curl
7.19.2
sqlite
3.5.6
WebKit
r29711
Thecrosssource:
exportARCH=arm
exportCC=iwmmxt_le-gcc
exportCXX=iwmmxt_le-gcc
exportBUILD_ROOT=/uplatform
export
PATH=/opt/montavista/cee/devkit/arm/iwmmxt_le/bin/:
/opt/montavista/cee/host/bin/:
$BUILD_ROOT/usr/bin:
$PATH
PKG_CONFIG_PATH=$BUILD_ROOT/usr/lib/pkgconfig:
$BUILD_ROOT/usr/X11R6/lib/pkgconfig
说明:
CC是c的编译器选项,CXX是C++的编译器选项。
BUILD_ROOT是要build的路径。
PKG_CONFIG_PATH,现在大多数软件,都是通过pkg-config来检查依赖关系的,所以要把两者都加到PKG_CONFIG_PATH环境变量中
Libpng
ethoac_cv_fnuc_malloc_O_nonull=yes>
>
$ARCH-linux.cache
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&
&
makeinstall
./configure
应为需要较高级的版本的pkg-config才能编译glib和gtk,如果编译机上的版本够高就不需要在升级pkg-config了
Gperf
企业版的/usr/bin下有,可以直接使用,如果没有需要编译一个
字体读取文件库
Libjpeg
由于x11的需求不同,在配置选项的时候要加特定的参数。
所以需要知己configure–h看所需要的选项
Glib
ac_cv_type_long=yes
glib_cv_long_format=ll
glib_cv_stack_grows=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=yes
./configure--host=arm-linux--prefix=$BUILD_ROOT/usr
以上选项加入到configure里再configure,应为我们arm上裁剪的是
2.4内核,所以有些是不支持的,需要屏蔽
Atk
exportCFLAGS="
`pkg-config--cflagsglib-
2.0`-I$BUILD_ROOT/usr/include"
exportLDFLAGS="
-L$BUILD_ROOT/usr/lib,-rpath=$BUILD_ROOT/usr/lib"
因为atk是依赖glib的,所以需要指定glib
Cairo
ExportCFLAGS="
-I$BUILD_ROOT/usr/include-I$BUILD_ROOT/usr/X11R6/include"
ExportLDFLAGS="
-L$BUILD_ROOT/usr/lib-L$BUILD_ROOT/usr/X11R6/lib-lXft-lfreetype-lfontconfig-lXrender-lexpat-lXext-lX11"
./configure--host=arm-linux--disable-nls--with-x--prefix=$BUILD_ROOT/usr--x-includes=$BUILD_ROOT/usr/X11R6/include--x-libraries=$BUILD_ROOT/usr/X11R6/libmake&
由于我们编译的是
1.2.0所有不需要编译pixman
Pango
FREETYPE_CONFIG=$BUILD_ROOT/usr/bin/freetype-config
Export
LDFLAGS="
-L$BUILD_ROOT/usr/lib-Wl,-rpath=$BUILD_ROOT/usr/lib"
CFLAGS="
2.0cairo`-I$BUILD_ROOT/usr/include/freetype2"
因为pango依赖GLib,freetype,cairo,x11,所以要指明其连接
首先屏蔽config.h里面的
HAVE_XFIXES0
HAVE_CUPS_API_1_2
再configure
`pkg-config--cflagspangoft2pangocairo`-I$BUILD_ROOT/usr/include-I$BUILD_ROOT/usr/include/freetype2-I$BUILD_ROOT/usr/X11R6/include/"
`pkg-config--libspangoft2pangocairo`-L$BUILD_ROOT/usr/lib-lintl-L$BUILD_ROOT/usr/X11R6/lib-lXft-lfreetype-lfontconfig-lXrender-lexpat-lXext-lX11"
CC=iwmmxt_le-gcc
./configure--disable-cups--disable-nls--enable-xim=no--disable-xim-inst--with-xinput=nomake&
./configure--enable-static--enable-shared--host=arm-linux--prefix=$BUILD_ROOT/usr/Xslt
./configure--host=arm-linux--with-x--prefix=$BUILD_ROOT/usr--x-includes=$BUILD_ROOT/usr/X11R6/include--x-libraries=$BUILD_ROOT/usr/X11R6/libCurl
ac_cv_file___dev_urandom_=yes
./configure--host=arm-linux--prefix=$BUILD_ROOT/usr/-without-ssl--without-ca-path--without-ca-bundle
在configure文件里加ac_cv_file___dev_urandom_=yes,再configure
Sqlite
首先执行
shautogen.sh
执行autogen脚本,会生成configure,再执行configure
CFLAGS=-I$BUILD_ROOT/usr/includeLDFLAGS=-L$BUILD_ROOT/usr/lib./configure--prefix=$BUILD_ROOT/usr--host=$ARCH-linuxCFLAGS=-I$BUILD_ROOT/usr/includeCPPFLAGS=-I$BUILD_ROOT/usr/includeicu_config=$BUILD_ROOT/usr/
3.编译出错Q&
A:
Q:
在configure中报找不到某个库,或某个库的版本太低。
A:
1确认是否有该库,版本是否太低。
如果没有请编译该库
2有该库文件,证明没有正确的连接到在CFLAGS和LDFLAGS两个环境变量中指明连接的头文件和库。
3只明了路径为什么还不行?
有些要通过pkg-config读取.pc文件的形式才能正确。
在configure中什么找不到,或一些莫名奇妙的错误。
直接打开configure文件,找到报错的地方,找到其判断语句并将起屏蔽。
如
2.4的内核不支持stack_grows,在编译glib的时候就要加glib_cv_stack_grows=no,让其屏蔽过去。
在make的时候包语法错误
找到该文件,直接修改其语法错误。
应为是开源软件,有语法错误很正常。
Q:
在make的时候出现找不到某库文件
直接在Makefile的LDFLAGS加其库连接选项,如果本来就不要该库就直接删除。
在make的时候找不到某函数。
在config.h里屏蔽其函数对应的宏。
一般来宏来控制某个编译选项,有些函数是通过宏来判断是否执行的。
其他问题
请google一下。
哈哈!
三.WebKit分析
1.体系结构
WebKit上层组织应用
WebCore
¨
Page与外框相关的内容(Frame,Page,History,Focus,Window)
Loader加载资源及Cache
HTML-DOMHTML内容及解析
DOM-DOMCORE内容
XML-XML内容及解析
Render-排版功能
CSS-DOMCSS内容
Binding-DOM与JavascriptCore绑定的功能
Editing-所有与编辑相关的功能
JavascriptCore-javascript引擎
API-基本javascript功能
Binding与其它功能绑定的功能,如:
DOM,C,JNI
DerviedSource自动产生的代码
ForwordHeads头文件,无实际意义
PCRE-Perl-CompatibleRegularExpressions
KJS-JavascriptKernel
WTF-KDE的C++模板库
Unicodeunicodexx
Toolstoolsxx
CURL-url客户端传输库
PlatForm-与平台相关的功能,如图形图像,字体,Unicode,IO,输入法等.
2.解析流程
2.解析划分字符串
3.通过DomBuilder按合法的html规范生成Dom树
4.如果有javascript,JSEngine就通过ECMA-262标准完善Dom树
5.把Dom传给LayoutEngine,进行布局,如果有CSS样式,就通过CSSParser解析。
6.最后Renderingout出来
3.浏览器系统结构
浏览器系统结构图分为四层
第一层为业务应用层,用户可在webkit基础上构建各种应用。
第二层为插件及第三方库。
第三层为webkit平台Porting所需的接口层。
第四层为平台和操作系统支持层,提供webkit平台所需的软硬件资源。
四.各种浏览器比较分析
1.网页浏览器列表
引擎
网页浏览器
Trident
Gecko
Fennec,Firefox,网景(6至9),SeaMonkey,Camino,Flock,
Galeon,K-Meleon,Minimo,Mozilla,Sleipnir,Songbird,
XeroBank
KHTML或WebKit框架
Safari,Konqueror,Epiphany,GoogleChrome,iCab,OmniWeb,Midori,Shiira
Presto
Opera,xxDS浏览器
Java
HotJava,OperaMini,UCWEB
Tasman
文字界面
Lynx,Links,w3m
嵌入式系统
其它
Amaya,Dillo,Mosaic
Gecko
是套开放源代码的、以C++编写的网页排版引擎。
目前为Mozilla家族网页浏览器以及Netscape6以后版本浏览器所使用。
这软件原本是由网景通讯公司开发的,现在则由Mozilla基金会维护。
这套排版引擎提供了一个丰富的程序界面以供互联网相关的应用程式使用,例如网页浏览器、HTML编辑器、客户端/服务器等等。
虽然最初的主要对象是Mozilla的衍生产品,如Netscape和MozillaFirefox,现在已有很多其他软件现在利用这个排版引擎。
Gecko是跨平台的,能在MicrosoftWindows、Linux和MacOSX等主要操作系统上运行。
KHTML
KDE系统自KDE2版起,在KDE的新程式Konqueror的网页浏览器使用了KHTML引擎。
Presto
是一个由OperaSoftware开发的浏览器排版引擎,供Opera
7.0~
9.60版使用。
Presto取代了旧版Opera4至6版本使用的Elektra排版引擎,包括加入动态功能,例如网页或其部分可随着DOM及Script语法的事件而重新排版。
Presto在推出后不断有更新版本推出,使不少错误得以修正,以及阅读Javascript效能得以最佳化。
2.浏览参数性能比较
IE,Firefox,Opera,Safari。
它使用了iBench和SunSpider作性能基准测试软件。
这里我们摘取其部分有用数据,进行比较。
iBench
是一款应用广泛、跨平台基准测试程序,它能够检测各种Web客户端应用网络新技术时的所表现出来的性能数据。
这里的Web客户端是指任何用于从网上获取信息的硬件和软件,不论使用T1连接互联网Macintosh电脑、无线掌上设备、运行Linux接收WebTV的台式机都在其中。
程序将对这些设备进行一系列测试,得出易用特性和网速对应用的影响程度。
SunSpider
一个JavaScript的基准。
这个基准测试核心的JavaScript语言,并非测试DOM或其他浏览器的API的。
它的目的是比较不同版本的同一浏览器,以及不同的浏览器之间的比较。
是广泛使用的JavaScript的基准。
5.0的XML/CSS和HTML的下载结果可以看出Safari和Firefox表现都不错,IE和Opera表现其次。
5.0的JavaScript的测试性能上看,Safari,opera和Firefox都表现不错,IE明显落后。
以上为SunSpider测试出的综合指标,越小越好。
明显可以看出,Firefox和Safari表现比较好,Opera其实,IE比较落后。
一下是SunSpider测试个参数详细列表:
3.浏览器使用率分析
全球浏览器使用分布
日期
Firefox
Opera
Safari
Q42008
70.53%
20.35%
0.73%
6.84%
Q32008
72.22%
19.48%
0.71%
6.39%
Q22008
73.81%
18.43%
6.14%
Q12008
75.06%
17.35%
0.67%
5.78%
Q42007
77.37%
15.84%
0.62%
5.24%
Q32007
78.85%
14.69%
0.51%
4.80%
Q22007
78.76%
14.92%
0.46%
4.66%
Q12007
79.38%
14.35%
0.50%
4.70%
Q42006
80.69%
13.50%
0.56%
4.06%
Q32006
82.88%
11.89%
3.30%
Q22006
84.03%
10.67%
0.57%
3.25%
Q12006
85.01%
9.77%
0.53%
3.10%
Q42005
85.88%
9.00%
0.54%
2.80%
Q32005
86.74%
7.97%
0.55%
2.24%
Q22005
87.24%
8.08%
0.52%
1.89%
Q12005
89.02%
6.17%
0.49%
1.70%
Q42004
91.35%
3.66%
1.50%
增长率:
-27.91%
229.82%
43.13%
356%
4.WebKit的SWOT分析
优势(Strengths)
通过测试结果WebKit的性能优越是其最大的优势,再加上其开源项目。
性能优越加开源这两大优势,是目前很多嵌入式产品选择他的原因。
劣势(Weaknesses)
因为开源,代码并不是最新的,都是Apple和KDE的更新产品。
代码有滞后性。
开发周期较长和人力投入比较大,毕竟代码量大,复杂度高。
机会(Opportunities)
随着通讯技术的发展,以后的手持设备基本都配有上网功能。
但目前嵌入式设备上的浏览器还是只有竞争时期,这是一个很好的机遇。
如果在做出优秀的适应嵌入式的浏览器,将能成为这一浪潮的弄潮儿。
威胁(Threats)
大蛋糕大家都想要,腾讯,google等都开始推出自己的浏览器。
嵌入式方面Opera,Access等公司都在努力扩张直接的市场,一些大公司也直接晚上WebKit推到直接的平台上,Apple,Android,NOKI等都在自己的手机上推出WebKit的浏览器,可见其竞争是非常激烈度。
五.浏览器的未来
基于WebKit引擎的SafariforWin已经推出,我们可以发现Safari除