自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析S60 Webkit編譯方法

移動開發(fā)
S60 Webkit編譯方法是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)S60 Webkit應(yīng)用,具體內(nèi)容的學(xué)習(xí)來看本文詳解。

S60 Webkit編譯方法是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)S60 Webkit應(yīng)用,把基本的s60 webkit的編譯環(huán)境給搭建好了,下一步就是要調(diào)整一下這個s60 webkit的編譯腳本了。打開這個s60 webkit,應(yīng)該可以看到一個叫做build.bat文件,這個文件是windows下面的批處理文件(不過有趣的是,這個文件實際上是使用perl的語法編寫的。)

按照官方的compile guide,需要用戶安裝carbide express 1.0才可以工作,但是我這邊懶得這么做了,浪費硬盤空間,偶安裝的是carbide.c++ v1.3 oem版(hoho,這個版本的license可以從網(wǎng)上很容易地下載到)直接可以通過簡單修改一下這個build.bat來實現(xiàn)自動化編譯,當(dāng)然了,如果各位真的嚴(yán)格按照官方的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; 

這幾行應(yīng)該是為carbide express 1.0準(zhǔn)備的路徑,而我們目前用的是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的朋友,呵呵,很幸運就可以不必用這個了,直接注釋掉即可,修改以后應(yīng)該是這個樣子的:

  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在注冊表中的路徑,請親手確認(rèn)一下這個注冊表項是否真的存在,其指定的路徑是否正確(這一點對于多次安裝這個版本的sdk的朋友來說是很重要的),如果不存在就手工創(chuàng)建它,或者手工把它修改正確。

好了,現(xiàn)在就可以進(jìn)入一下命令行,用devices命令確認(rèn)一下,當(dāng)前的sdk,就可以高高興興地開始編譯了。
 
進(jìn)入:

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

然后輸入命令:

  1. build  

不出意外的話,應(yīng)該開始一段漫長的編譯過程,hoho,偶的機器上編譯了10多分鐘呢。。。痛苦ing

然后就可以打開模擬器,去看看效果了。這種方式的build只能夠編譯出來winscw的版本,只能夠在模擬器上使用。呵呵,很興奮是不是?已經(jīng)看到自己編譯出來的瀏覽器可以在手機上正常工作了是不是?!
 
如果真的要編譯成armv5或者gcce的版本,還有比較漫長的路要走。編譯生成手機上可以工作的版本需要以下的一些工作,首先build.bat是可以帶命令行參數(shù)的,具體的定義如下:

  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 

我們?nèi)绻M幾g成手機可以使用的二進(jìn)制版本,就要使用build -g這個命令才行:

  1. build -g 

初次運行這個命令會發(fā)現(xiàn)如下錯誤:
 
(1)關(guān)于"int64_t"數(shù)據(jù)類型的問題出錯的提示是這個樣子的:

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

這個錯誤是由于編譯器里面沒有內(nèi)置int64_t之類的數(shù)據(jù)類型導(dǎo)致的(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的源代碼里面進(jìn)行修改。
 
(2)關(guān)于memman的錯誤
 
出錯的提示是這個樣子的:

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

這個錯誤是由于似乎導(dǎo)出函數(shù)里面少了一個函數(shù)導(dǎo)致的,解決的方法也很簡單,修改c:\Symbian\9.1\S60_3rd\S60\MemoryManager\Eabi\MemMan_sdkU.DEF文件,
 
原文是:

  1. _ZTIV15CSimpleNotifier @ 27 NONAME ; DATA 

修改為:

  1. _ZTIV15CSimpleNotifier @ 27 ABSENT ; DATA 

好了,然后就可以使用build -g重新編譯了,編譯完畢后,會有相關(guān)的dll的安裝包,然后就可以自己修改和集成了(剩下的偶不想多說了,各位應(yīng)該都是高手,都能找到調(diào)用這些webkit dll的方法),想想看,如果能夠在自己的程序中集成一個全功能的內(nèi)置瀏覽器,會不會感覺很爽?在推廣自己的客戶端軟件產(chǎn)品的同時也把自己的wap網(wǎng)站也一并推廣了。
 
(3)關(guān)于代碼中的幾處namespace忘記加分號結(jié)尾的問題,有幾處需要修改的:

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

定義如下的namespace,但是忘記加上分號了:

  1. namespace KJS {  
  2.    class WidgetEventHandler;  

應(yīng)該改為:

  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)增加幾個函數(shù)定義
 
在java script core里面,有幾個函數(shù)是沒有定義的,需要手工添加進(jìn)去:
 
 

  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應(yīng)該不是編譯出來的,應(yīng)該是S60WebKit自帶的  
  7. WebCore_sdk.dll  
  8. WebUi.exe 

這些有了就可以查看那個S60WebUi的目錄,具體地去看如何使用這些dll了。

小結(jié):解析S60 Webkit編譯方法的內(nèi)容介紹完了,希望通過S60 Webkit應(yīng)用內(nèi)容的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

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系統(tǒng)

2011-06-24 09:46:01

Windows PhoSymbian S60MeeGo

2011-06-23 09:31:56

Nokia Qt SDK

2010-06-02 10:33:52

Symbian開發(fā)

2009-04-17 09:08:44

SymbianS60上網(wǎng)本

2010-06-12 10:08:05

Symbian開發(fā)

2009-08-13 09:38:02

Symbian S60Nokia新界面

2009-04-15 09:01:02

Symbian瀏覽器諾基亞

2009-04-16 09:28:30

NokiaPhoto BrowsS60

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:31:04

Android Web插件

2011-09-09 15:51:58

Android Web應(yīng)用

2011-06-09 14:56:53

QT 編譯
點贊
收藏

51CTO技術(shù)棧公眾號