webkit编译详解.docx
- 文档编号:17977964
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:19
- 大小:23.14KB
webkit编译详解.docx
《webkit编译详解.docx》由会员分享,可在线阅读,更多相关《webkit编译详解.docx(19页珍藏版)》请在冰豆网上搜索。
webkit编译详解
二.Webkit编译详解
1.依赖xx介绍
libicu-dev
ICU是一个成熟,广泛使用的一套为C/C++和Java库提供Unicode的全球化支持软件。
ICU广泛的应用在便携式设备上,并给出相同的结果在所有平台之间的C/C++和Java软件。
libxslt-dev
XSLT的英文标准名称为eXtensibleStylesheetLanguageTransformation。
根据W3C的规范说明书(http:
3.org/TR/xslt),最早设计XSLT的用意是帮助XML文档(document)转换为其它文档。
但是随着发展,XSLT已不仅仅用于将XML转换为HTML或其它文本格式,更全面的定义应该是:
XSLT是一种用来转换XML文档结构的语言。
libcurl-dev
cURL是一个利用URL语法的文件传输工具,是基于libcurl的前端命令行工具。
它支持很多协议:
FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE以及LDAP。
它同样支持HTTPS认证,HTTPPOST方法,HTTPPUT方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道(proxytunneling),甚至它还支持IPv6,socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
libsqlite3-dev
SQLite是实现了SQL92标准的一个大子集的嵌入式数据库.其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.功能一定程度上居于MySQL和PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3倍(甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信.
libjpeg62-dev
libjpeg软件包包含jpeg库.这些库使图形文件在联合图象专家组的标准上压缩.它是一种"有损耗"的压缩算法.
libpng12-dev
libpng软件包包含libpng库.这些库被其他程序用于读写png文件
gperf
'gperf'是一个用C++编写的完美的hash函数生成器.它通过一个完美的hash函数F转换一个含有N元素的用户特定关键字集合到集合W.F唯一映射关键字到W的
0..K范围,其中K>=N如果K=N那么F就是最小化的完美hash函数.'gperf'生成一个
0..K元素的静态查找表和一对C函数.这些函数决定一个给定的字符串S是否在集合W中,通过只多一次的查找.
'gperf'普遍用于为多个商业编译器,研究型编译器,语言处理工具的词法分析器生成一个关键字识别器.这些编译器包括GNUC,GNUC++,GNUPascal,GNUModula3,和GNUindent.完整的'gperf'C++源代码可以通过匿名ftp`ics.uci.edu'和`ftp.santafe.edu'得到.'gperf'已经随GNUlibg++一起发布好几年了
flex
快速词法分析器发生器
Bison
GNU项目分析器
2.X11+Gtk+WebKit交叉编译详解
编译列表:
Name
Version
libpng
1.2.10
pkg-config
0.23
gperf
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
1.20.0
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
export
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
pkg-config
./configure
make&&makeinstall
应为需要较高级的版本的pkg-config才能编译glib和gtk,如果编译机上的版本够高就不需要在升级pkg-config了
Gperf
./configure
make&&makeinstall
企业版的/usr/bin下有,可以直接使用,如果没有需要编译一个
Tiff
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&&makeinstall
字体读取文件库
Libjpeg
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&&makeinstall
freetype
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&&makeinstall
libxml2
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&&makeinstall
fontconfig
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
make&&makeinstall
XFree86
./configure--prefix=/$BUILD_ROOT/usr--host=$ARCH-linux
由于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
make&&makeinstall
以上选项加入到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"
./configure--host=arm-linux--prefix=$BUILD_ROOT/usr
make&&makeinstall
因为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&&makeinstall
由于我们编译的是
1.2.0所有不需要编译pixman
Pango
export
FREETYPE_CONFIG=$BUILD_ROOT/usr/bin/freetype-config
Export
LDFLAGS="-L$BUILD_ROOT/usr/lib-Wl,-rpath=$BUILD_ROOT/usr/lib"
export
CFLAGS="`pkg-config--cflagsglib-
2.0cairo`-I$BUILD_ROOT/usr/include/freetype2"./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&&makeinstall
因为pango依赖GLib,freetype,cairo,x11,所以要指明其连接
gtk+
首先屏蔽config.h里面的
HAVE_XFIXES0
HAVE_CUPS_API_1_2
再configure
CFLAGS="`pkg-config--cflagspangoft2pangocairo`-I$BUILD_ROOT/usr/include-I$BUILD_ROOT/usr/include/freetype2-I$BUILD_ROOT/usr/X11R6/include/"
LDFLAGS="`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&&makeinstall
ICU
./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
./configure--host=arm-linux--prefix=$BUILD_ROOT/usr
make&&makeinstall
WebKit
首先执行
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文件的形式才能正确。
Q:
在configure中什么找不到,或一些莫名奇妙的错误。
A:
直接打开configure文件,找到报错的地方,找到其判断语句并将起屏蔽。
如
2.4的内核不支持stack_grows,在编译glib的时候就要加glib_cv_stack_grows=no,让其屏蔽过去。
Q:
在make的时候包语法错误
A:
找到该文件,直接修改其语法错误。
应为是开源软件,有语法错误很正常。
Q:
在make的时候出现找不到某库文件
A:
直接在Makefile的LDFLAGS加其库连接选项,如果本来就不要该库就直接删除。
Q:
在make的时候找不到某函数。
A:
在config.h里屏蔽其函数对应的宏。
一般来宏来控制某个编译选项,有些函数是通过宏来判断是否执行的。
Q:
其他问题
A:
请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
Trident
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效能得以最佳化。
Tasman
2.浏览参数性能比较
IE,Firefox,Opera,Safari。
它使用了iBench和SunSpider作性能基准测试软件。
这里我们摘取其部分有用数据,进行比较。
iBench
是一款应用广泛、跨平台基准测试程序,它能够检测各种Web客户端应用网络新技术时的所表现出来的性能数据。
这里的Web客户端是指任何用于从网上获取信息的硬件和软件,不论使用T1连接互联网Macintosh电脑、无线掌上设备、运行Linux接收WebTV的台式机都在其中。
程序将对这些设备进行一系列测试,得出易用特性和网速对应用的影响程度。
SunSpider
一个JavaScript的基准。
这个基准测试核心的JavaScript语言,并非测试DOM或其他浏览器的API的。
它的目的是比较不同版本的同一浏览器,以及不同的浏览器之间的比较。
是广泛使用的JavaScript的基准。
iBench
5.0的XML/CSS和HTML的下载结果可以看出Safari和Firefox表现都不错,IE和Opera表现其次。
iBench
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%
0.71%
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%
0.62%
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%
0.51%
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除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- webkit 编译 详解