詳解S60 WebKit 21772編譯教程
S60 WebKit 21772編譯教程是本文要介紹的內容,主要是來了解并學習S60 WebKit應用,具體內容的學習來看本文詳解。
1、安裝環(huán)境:
- perl jdk S60-SDK-0548-3.0-f.3.215f.zip
- Carbide1.3(其他Carbide應該一樣)
- svn
2、磁盤映射:
- subst X: C:/Symbian/9.1/S60_3rd
3、下載webkit
- svn co http://svn.webkit.org/repository/webkit/S60/trunk@21772 S60 到 X:
4、修改build.bat
(1)確定sdk在注冊表的位置正確(同一個SDK安裝多次會不同)
- my $sdkhome =
- $Registry->{
- "HKEY_LOCAL_MACHINE/SOFTWARE/Symbian/Series 60/3rd Ed. SDK for Symbian OS/TargetDir"
- };
(2)carbide的安裝目錄
- $cbdhome = "E://Nokia//Carbide.c++ v1.3" unless -d $cbdhome;
(3)carbide文件目錄修改
- plugins//com.nokia.carbide.cpp.support_1.0.0 替換為 x86Build
原來carbide1.0的路徑改為1.3的 $cbdhome//x86Build//Symbian_Support//
(4)注釋掉delete $ENV{'MWSYM2LIBRARIES'};
改為 #delete $ENV{'MWSYM2LIBRARIES'};
5、memman的錯誤
- elf2e32 : Error: E1036: Symbol _ZTI15CSimpleNotifier Missing from ELF File : ../EPOC32/BUILD/S60/MEMMAN/GCCE/UREL/MemMan_sdk.dll.
- elf2e32 : Error: E1036: Symbol _ZTV15CSimpleNotifier Missing from ELF File : ../EPOC32/BUILD/S60/MEMMAN/GCCE/UREL/MemMan_sdk.dll.
這個錯誤是由于導出函數里面少函數
- 修改c:/Symbian/9.1/S60_3rd/S60/MemoryManager/Eabi/MemMan_gcceU.DEF
- _ZTI15CSimpleNotifier @ 18 NONAME ; #<TI># 改為 _ZTI15CSimpleNotifier @ 18 ABSENT ; #<TI>#
- _ZTV15CSimpleNotifier @ 23 ABSENT ; #<VT># 改為 _ZTV15CSimpleNotifier @ 23 ABSENT ; #<VT>#
修改c:/Symbian/9.1/S60_3rd/S60/MemoryManager/Eabi/MemMan_sdkU.DEF
- _ZTI15CSimpleNotifier @ 22 NONAME ; DATA 改為 _ZTI15CSimpleNotifier @ 22 ABSENT ; DATA
- _ZTV15CSimpleNotifier @ 27 NONAME ; DATA 改為 _ZTV15CSimpleNotifier @ 27 ABSENT ; DATA
6、"int64_t"數據類型的問題
- JavaScriptCore//bindings//HashFunctions.h:35:error:'int64_t' does not name a type..
- JavaScriptCore//bindings/HashTraits.h:53: error: no type named `SignedType' in `struct WTF::IntTypes<8u>'
由于GCCE編譯器里面沒有內置int64_t之類的數據類型導致的(armv5的編譯器就沒有這個問題)
修改c:/Symbian/9.1/S60_3rd/S60/JavaScriptCore/kjs/stdint.h文件,在末尾#endif的上面添加如下的定義:
- #ifdef __GCCE__
- typedef long long int64_t;
- typedef unsigned long long uint64_t;
- typedef unsigned long uintptr_t;
- typedef unsigned long intptr_t;
- #endif
7、代碼中namespace忘記加分號結尾:
- c:/Symbian/9.1/S60_3rd/S60/WebKit/BrowserView/inc/WidgetExtension.h
- namespace KJS {
- class WidgetEventHandler;
- };
- c:/Symbian/9.1/S60_3rd/S60/WebCore/khtml/dom/dom_string.h
- namespace khtml {
- class Length;
- };
- c:/Symbian/9.1/S60_3rd/S60/WebCore/khtml/misc/loader.h
- namespace KIO {
- class Job;
- class TransferJob;
- };
8、在java script core里面,有幾個函數是沒有定義的,需要手工添加進去:
- Kwqkhtmlpart.cpp:(.text+0xb1ec): undefined reference to `_NPN_CreateScriptObject'
- make[1]: *** [../EPOC32/RELEASE/GCCE/UREL/WebCore_sdk.dll] Error 1
- c:/Symbian/9.1/S60_3rd/S60/JavaScriptCore/group/BMARM/JavaScriptCoreU.def
打開這個文件,然后在該文件的末尾添加如下定義:
- _ZN3KJS11Interpreter30createLanguageInstanceForValueEPNS_9ExecStateENS_8Bindings8
- Instance15BindingLanguageERKNS_6ObjectEPKNS3_10RootObjectESB_ @ 389 NONAME
- _ZN3KJS16RuntimeObjectImpC1EPNS_8Bindings8InstanceEb @ 390 NONAME
- _ZN3KJS16RuntimeObjectImpC2EPNS_8Bindings8InstanceEb @ 391 NONAME
- _ZTIN3KJS16RuntimeObjectImpE @ 392 NONAME ; #<TI>#
- _ZTVN3KJS16RuntimeObjectImpE @ 393 NONAME ; #<VT>#
- _ZN3KJS15ProtectedValues20decreaseProtectCountEPNS_8ValueImpE @ 394 ABSENT
- _ZN3KJS15ProtectedValues20increaseProtectCountEPNS_8ValueImpE @ 395 ABSENT
- _ZN3KJS8Bindings10RootObject14setInterpreterEPNS_11InterpreterE @ 396 NONAME
- _ZN3KJS8Bindings10RootObject25removeAllNativeReferencesEv @ 397 NONAME
- _ZN3KJS8Bindings8Instance32createBindingForLanguageInstanceENS1_15BindingLanguageEPvPKNS0_10RootObjectE @ 398 NONAME
- _NPN_CreateScriptObject @ 399 NONAME
9、
- WebCore_sdk.dso not found
- Solution: freeze exports by build -nfg and rebuild webcore completly as build -g webcore
10、
- aiwdialdata.dso: No such file: No such file or directory
- Solution: modify webkit.mmp file as given below #ifndef __BROWSER_SDK LIBRARY aiwdialdata.lib #endif
11、
- make[1]: *** [../EPOC32/RELEASE/GCCE/UREL/browserengine_sdk.dll] Error 1
- make: *** [TARGETWEBKIT] Error 2
- elf2e32 : Error: E1036: Symbol _ZTI10CScrollBar,_ZTI12CScrollThumb,_ZTI15CScrollBarFrame,_ZTI22CScrollBarCornerWindow,
- _ZTV10CScrollBar,_ZTV12CScrollThumb,_ZTV15CScrollBarFrame,_ZTV22CScrollBarCornerWi
- ndow Missing from ELF File : ../EPOC32/BUILD/S60/WEBKIT/GCCE/UREL/browserengine_sdk.dll.
Solution: 同8,把相應DEF中,這些已經不存在的方法改成 ABSENT
12、
- arm-none-symbianelf-ld: ../EPOC32/RELEASE/ARMV5/LIB/HomePage_Sdk.dso: No such file: No such file or
- directory
- make[1]: *** [../EPOC32/RELEASE/GCCE/UREL/WebUi.exe] Error 1
- make: *** [TARGETWEBUI] Error 2
- Solution: freeze exports by build -nfg and rebuild webcore completly as build -gn
- Processing Reindeer.pkg...
- Created Reindeer.SIS
- Sign Reindeer.sis...
- Delete intermediate files...
- Done, please copy Reindeer.sisx to your phone
- Completed in: 00:02:09
- Scanning build output for errors: 0 found
- Restoring variant.cfg
真機編譯成功。
小結:詳解S60 WebKit 21772編譯教程的內容介紹完了,希望通過S60 WebKit內容的學習能對你有所幫助!