解析S60 Webkit编译方法

移动开发
S60 Webkit编译方法是本文要介绍的内容,主要是来了解并学习S60 Webkit应用,具体内容的学习来看本文详解。

S60 Webkit编译方法是本文要介绍的内容,主要是来了解并学习S60 Webkit应用,把基本的s60 webkit的编译环境给搭建好了,下一步就是要调整一下这个s60 webkit的编译脚本了。打开这个s60 webkit,应该可以看到一个叫做build.bat文件,这个文件是windows下面的批处理文件(不过有趣的是,这个文件实际上是使用perl的语法编写的。)

按照官方的compile guide,需要用户安装carbide express 1.0才可以工作,但是我这边懒得这么做了,浪费硬盘空间,偶安装的是carbide.c++ v1.3 oem版(hoho,这个版本的license可以从网上很容易地下载到)直接可以通过简单修改一下这个build.bat来实现自动化编译,当然了,如果各位真的严格按照官方的guide一步一步做的话,大可不必像偶这么麻烦:

首先打开C:\Symbian\9.1\S60_3rd\S60\build.bat,然后找到下面这样的脚本:

  1. my $cbdhome = $ENV{CARBIDE_HOME} || '';  
  2. $cbdhome = "$ENV{ProgramFiles}\\Carbide" unless -d $cbdhome;  
  3. $cbdhome = "c:\\Carbide" unless -d $cbdhome;  
  4. $cbdhome = "c:\\apps\\Carbide" unless -d $cbdhome; 

这几行应该是为carbide express 1.0准备的路径,而我们目前用的是carbide.c++ v1.3,所以还是要做以下修改的:

  1. my $cbdhome = $ENV{CARBIDE_HOME} || '';  
  2. # changed by wayne   
  3. $cbdhome = "$ENV{ProgramFiles}\\Nokia\\Carbide.c++ v1.3" unless -d $cbdhome;  
  4. $cbdhome = "$ENV{ProgramFiles}\\Carbide" unless -d $cbdhome;  
  5. $cbdhome = "c:\\Carbide" unless -d $cbdhome;  
  6. $cbdhome = "c:\\apps\\Carbide" unless -d $cbdhome; 

从这里就可以看出来了吧?这里是添加了carbide.c++ v1.3的安装路径了。
 
然后下一步,就是要找到如下的地方:

  1. delete $ENV{'MWSYM2LIBRARIES'}; 

这一步也是为carbide express 1.0用的,用1.3的朋友,呵呵,很幸运就可以不必用这个了,直接注释掉即可,修改以后应该是这个样子的:

  1. # changed by wayne   
  2. # delete $ENV{'MWSYM2LIBRARIES'}; 

另外,在这个build.bat中还有一个地方就是这里:

  1. my $sdkhome = $Registry->{ "HKEY_LOCAL_MACHINE/SOFTWARE/Symbian/Series 60/3rd Ed. SDK for Symbian OS/TargetDir" }; 

这里代表刚刚安装的sdk在注册表中的路径,请亲手确认一下这个注册表项是否真的存在,其指定的路径是否正确(这一点对于多次安装这个版本的sdk的朋友来说是很重要的),如果不存在就手工创建它,或者手工把它修改正确。

好了,现在就可以进入一下命令行,用devices命令确认一下,当前的sdk,就可以高高兴兴地开始编译了。
 
进入:

  1. C:\Symbian\9.1\S60_3rd\S60\ 

然后输入命令:

  1. build  

不出意外的话,应该开始一段漫长的编译过程,hoho,偶的机器上编译了10多分钟呢。。。痛苦ing

然后就可以打开模拟器,去看看效果了。这种方式的build只能够编译出来winscw的版本,只能够在模拟器上使用。呵呵,很兴奋是不是?已经看到自己编译出来的浏览器可以在手机上正常工作了是不是?!
 
如果真的要编译成armv5或者gcce的版本,还有比较漫长的路要走。编译生成手机上可以工作的版本需要以下的一些工作,首先build.bat是可以带命令行参数的,具体的定义如下:

  1.  -n Do not include clean in compile  
  2. -f run freeze phase and exit  
  3. -g GCCE compiler for hardware build  
  4. -w Code Warrior compiler for emulator build  
  5. -t Target build  
  6. -d Turn on debugging, forces udeb flavour  
  7. -e Export generated environment and exit  
  8. -r Remove S60Internal dependencies and exit  
  9. -s X Map drive to this letter. Defaults to x  
  10. -h View this message 

我们如果希望编译成手机可以使用的二进制版本,就要使用build -g这个命令才行:

  1. build -g 

初次运行这个命令会发现如下错误:
 
(1)关于"int64_t"数据类型的问题出错的提示是这个样子的:

  1. JavaScriptCore//bindings//HashFunctions.h:35:error:'int64_t' does not name a type.. 

这个错误是由于编译器里面没有内置int64_t之类的数据类型导致的(armv5的编译器就没有这个问题)

解决的方法很简单:

修改c:\Symbian\9.1\S60_3rd\S60\JavaScriptCore\kjs\stdint.h文件,在末尾#endif的上面添加如下的定义:

  1. typedef long long int64_t;  
  2. typedef unsigned long long uint64_t;  
  3. typedef unsigned long uintptr_t;  
  4. typedef unsigned long intptr_t; 

这下子就不会在报告那个聒噪的问题了,注意必需要在这个文件里面做修改,直接修改:

  1. epoc32\include\oem\javascriptcore\stdint.h 

这个文件是无效的,因为每次build都会重新把JavaScriptCore里面的这个stdint.h拷贝到sdk的include\oem\javascriptcore目录下面,会把你修改过的stdint.h覆盖掉,因此,必需要在s60 webkit的源代码里面进行修改。
 
(2)关于memman的错误
 
出错的提示是这个样子的:

  1. elf2e32:Error:E1036:Symbol _ZTI15CSimpleNotifier, _ZTI15CSimpleNotifier Missing   
  2. from ELF File:..\EPOC32\BUILD\MEMMAN\GCCE\UREL\MemMan_sdk.dll.... 

这个错误是由于似乎导出函数里面少了一个函数导致的,解决的方法也很简单,修改c:\Symbian\9.1\S60_3rd\S60\MemoryManager\Eabi\MemMan_sdkU.DEF文件,
 
原文是:

  1. _ZTIV15CSimpleNotifier @ 27 NONAME ; DATA 

修改为:

  1. _ZTIV15CSimpleNotifier @ 27 ABSENT ; DATA 

好了,然后就可以使用build -g重新编译了,编译完毕后,会有相关的dll的安装包,然后就可以自己修改和集成了(剩下的偶不想多说了,各位应该都是高手,都能找到调用这些webkit dll的方法),想想看,如果能够在自己的程序中集成一个全功能的内置浏览器,会不会感觉很爽?在推广自己的客户端软件产品的同时也把自己的wap网站也一并推广了。
 
(3)关于代码中的几处namespace忘记加分号结尾的问题,有几处需要修改的:

  1. c:\Symbian\9.1\S60_3rd\S60\WebKit\BrowserView\inc\WidgetExtension.h 

定义如下的namespace,但是忘记加上分号了:

  1. namespace KJS {  
  2.    class WidgetEventHandler;  

应该改为:

  1. namespace KJS {  
  2.    class WidgetEventHandler;  
  3. }; // <----------注意,这里增加了一个分号!!  
  4. c:\Symbian\9.1\S60_3rd\S60\WebCore\khtml\dom\dom_string.h 

改为如下定义,加上分号,不再赘述:

  1. namespace khtml {  
  2.     class Length;  
  3. }; // <----------注意,这里增加了一个分号!!  
  4.  
  5. c:\Symbian\9.1\S60_3rd\S60\WebCore\khtml\misc\loader.h 

改为如下定义,加上分号,不再赘述:

  1. namespace KIO {  
  2.   class Job;  
  3.   class TransferJob;  
  4. };    // <----------注意,这里增加了一个分号!! 

(4)增加几个函数定义
 
在java script core里面,有几个函数是没有定义的,需要手工添加进去:
 
 

  1. c:\Symbian\9.1\S60_3rd\S60\JavaScriptCore\group\BMARM\JavaScriptCoreU.def 

打开这个文件,然后在该文件的末尾添加如下定义:

  1. _ZN3KJS11Interpreter30createLanguageInstanceForValueEPNS_9ExecStateENS_8Bindings8Instance15
  2. BindingLanguageERKNS_6ObjectEPKNS3_10RootObjectESB_ @ 389 NONAME  
  3. _ZN3KJS16RuntimeObjectImpC1EPNS_8Bindings8InstanceEb @ 390 NONAME _ZN3KJS16RuntimeObject
  4. ImpC2EPNS_8Bindings8InstanceEb @ 391 NONAME _ZTIN3KJS16RuntimeObjectImpE @ 392 NONAME ; 
  5. #<TI># _ZTVN3KJS16RuntimeObjectImpE @ 393 NONAME ; 
  6. #<VT># _ZN3KJS15ProtectedValues20decreaseProtectCountEPNS_8ValueImpE @ 394 NONAME   
  7. _ZN3KJS15ProtectedValues20increaseProtectCountEPNS_8ValueImpE @ 395 NONAME   
  8. _ZN3KJS8Bindings10RootObject14setInterpreterEPNS_11InterpreterE @ 396 NONAME   
  9. _ZN3KJS8Bindings10RootObject25removeAllNativeReferencesEv
  10. @ 397 NONAME _ZN3KJS8Bindings8Instance32createBindingForLanguageInstanceENS1_15BindingLanguageEPvPKNS0_10RootObjectE @ 398 NONAME   
  11. _NPN_CreateScriptObject @ 399 NONAME 

(5)解决aiwdialdata.dso找不到的问题
 
修改c:\Symbian\9.1\S60_3rd\S60\WebKit\group\webkit.mmp文件
 
将原来的:

  1. LIBRARY aiwdialdata.lib 

改为:

  1. #ifndef __BROWSER_SDK   
  2. LIBRARY aiwdialdata.lib   
  3. #endif 

然后先用build -g编译,如果有问题再用build -nfg编译吧这些dll的出口给freeze一下,然后再用build -g来编译,就在/epoc32/release/gcce/urel目录下面生成如下的dll:

  1. BrowserCache_sdk.dll  
  2. BrowserRec_sdk.DLL  
  3. HistoryProvider_sdk.dll  
  4. JavaScriptCore_sdk.DLL  
  5. MemMan_sdk.dll  
  6. pagescaler_sdk.dll <---这个dll应该不是编译出来的,应该是S60WebKit自带的  
  7. WebCore_sdk.dll  
  8. WebUi.exe 

这些有了就可以查看那个S60WebUi的目录,具体地去看如何使用这些dll了。

小结:解析S60 Webkit编译方法的内容介绍完了,希望通过S60 Webkit应用内容的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-09-09 15:08:17

S60 WebKit

2009-04-16 08:23:52

Opera浏览器S60

2009-07-24 09:26:27

Google Maps

2009-06-05 09:04:36

Google MobiS60系统

2011-06-23 09:31:56

Nokia Qt SDK

2011-06-24 09:46:01

Windows PhoSymbian S60MeeGo

2010-06-02 10:33:52

Symbian开发

2009-04-17 09:08:44

SymbianS60上网本

2010-06-12 10:08:05

Symbian开发

2009-08-13 09:38:02

Symbian S60Nokia新界面

2009-04-16 09:28:30

NokiaPhoto BrowsS60

2009-04-15 09:01:02

Symbian浏览器诺基亚

2010-05-12 10:44:24

2009-11-25 14:46:27

2009-06-04 09:24:59

SymbianUCWEB浏览器

2009-04-21 09:17:10

UCWEB手机浏览器S60

2011-04-29 11:05:57

搜狗手机输入法

2011-09-09 15:51:58

Android Web应用

2011-09-09 15:31:04

Android Web插件

2009-04-12 08:59:05

Symbian诺基亚移动OS
点赞
收藏

51CTO技术栈公众号