win7 64位編譯WebKit核心
該過程主要參照Moon出品的Win7+VS2010編譯WebKit總結(http://blog.csdn.net/wxdvc/article/details/8508077),表示感謝。
順帶留個qq:345271592,歡迎交流。
1.安裝VS2010,最好是英文版,並使用預設路徑安裝(沒敢換,怕出錯。。。坑爹)
2.安裝SP1:Visual Studio 2010 SP1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=23691,下載連結: http://download.microsoft.com/download/E/B/A/EBA0A152-F426-47E6-9E3F-EFB686E3CA20/VS2010SP1dvd1.iso,檔案大小:1.48GB),最好也用英文版的。。。。
3.安裝Windows SDK 7.1.(容易出錯)(下載頁面:Windows SDK 7.1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=8442,下載連結: http://download.microsoft.com/download/F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDK_EN_DVD.iso,檔案大小:567MB)注意需要根據自己的機器進行選擇,64位與32位是不同的)
錯誤如下,可能有些錯誤,有些機器不會遇到,以下是我遇到的錯誤:
1>.出錯內容:Installation of the "Microsoft Windows SDK for Windows 7" product has reported the following error: Please refer to SamplesSetupHTMLConfigDetails.htm document for further information.
解決辦法:在控制皮膚裡解除安裝:Microsoft Visual C++ 2010 x86 Redistributable和Microsoft Visual C++ 2010 x64 Redistributable兩項,也許你的是一項,總之解除安裝就對了。(另外可參考:http://www.cnblogs.com/duanshuiliu/archive/2013/04/02/2994776.html)
參考地址:http://support.microsoft.com/kb/2717426
2>.出錯內容:A problem occurred while installing selected Windows SDK components.
Installation of the "Microsoft Windows SDK for Windows 7 Compilers for x86" product has reported the following error: 安裝時發生嚴重錯誤
Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page at http://go.microsoft.com/fwlink/?LinkId=130245.
解決辦法:安裝SDK ver7.1時不要勾選Visual C++ compiler,裝完後安裝KB2519277
4.安裝QuickTimeSDK
該SDK下載比較麻煩,需要申請AppleID等等,我已經上傳到我的資源中,供大家下載使用,資源中有三部分,前兩個可能不會用到,只是下載時我一併下載了,主要用到quicktimesdk.zip中的exe安裝。(下載頁面:http://developer.apple.com/quicktime/download/,下載連結: http://adcdownload.apple.com/QuickTime/quicktime_7.3_sdk_for_windows/quicktimesdk.zip,檔案大小:2.02MB)
5.安裝DirectX SDK(下載頁面:http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=2c7da5fb-ffbb-4af6-8c66-651cbd28ca15,下載連結: http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe,檔案大小:554MB),這個需要驗證系統是否正版,照著流程做完就可下載了,盜版我不知道能否下載到。
6.編譯過程:
與原始檔資料夾相關的修改
現在假設你的原始碼資料夾名為WebKitSource。以我為例,我解壓原始檔壓縮包之後得到的資料夾WebKit-r128959就相當於這裡的WebKitSource資料夾。
將WebKitSupportLibrary.zip拷貝到WebKitSource下。注意,不要解壓。
以下的vs2010-build-env.cmd和pdenenv在我的資源中下載即可。
將vs2010-build-env.cmd拷貝到WebKitSource下,修改其中set CYGWIN_SOURCE_DIR=C:cygwin等號右邊的值,即你電腦中Cygwin的安裝目錄。另外,我將CYGWIN_DIR設定為C:cygwin_dir,你可以根據自己的需要修改。
將pdenenv拷貝到WebKitSource/Tools/Scripts下覆蓋原版。
將WebKitSource/Source/WebCore/Modules/quota中的檔案全部拷貝到WebKitSource/Source/WebCore/storage中去。
用VS2010開啟WebKitSource/Source/WebKit /win/ WebKit.vcproj / WebKit.sln,IDE會彈出一個Conversion Wizard告知你需要對方案(solution)或工程(project)進行轉換,點選下一步完成轉換。
將WebKitSource/Tools/vcbin下的cl.exe和midl.exe重新命名為cl-.exe和midl-.exe(即讓它們失效)。
開啟WebKitLibraries /win/ tools/ vsprops/ common.props,修改TreatWarningAsError為false。
開啟 Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def,刪除
其中的“?nullptr@@3Vnullptr_t@std@@A”。
找到 WebKitSource/ Source/ WebCore/ platform/ network/ curl/ CookieJarCurl.cpp和 WebKitSource/ Source/ WebCore/ platform/ image-decodersImageDecoder.cpp,右鍵開啟Properties選單,選擇Configuration Properties>General,修改Item Tyep為C/C++ compiler。(10月9日後記:我嘗試找了一下這兩個原始檔竟然沒找到,我當初的確修改過,此問題留待修改)注意:上述修改是在vs2010的編譯器中進行。
開啟WebCore/ platform/ LocalizedString.cpp,在264行和266行中有"Look Up “%@”"和"Look Up “<selection>”"注意%@和<selection>兩邊的雙引號是全形的,然後刪除這些全形的引號即可。
開啟WebKitSource/Source/WebCore/platform/ graphics/ cg目錄下的ImageSourceCG.h、WebKitSource/Source/WebCore/platform/ network/ cf目錄下的SocketStreamHandle.h和SocketStreamError.h三個標頭檔案,在#define xxx_h(以ImageSourceCG.h為例xxx_h就是ImageSourceCG_h)這行後面新增:
#ifndef ExportMacros_h
#include "config.h"
//你可以取消下面這行的註釋,在編譯過程中可能會看到我寫的提示資訊
//#pragma message("===>缺少定義,手動引入config.h")
#endif
在TestWebKitAPI工程的config.h(WebKitSource/ Tools/ TestWebKitAPI/ config.h)首部新增:#define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
Ashod編寫(我新增了一些中文註釋)的vs2010-build-env.cmd首先建立了一些連結,這樣你就不必再把WebKitSource資料夾移動到Cygwin的使用者目錄下了;然後設定了一些必要的環境變數:WEBKITOUTPUTDIR(編譯結果的輸出目錄)、WEBKITLIBRARIESDIR(WebKit相關庫的目錄)、VSINSTALLDIR(VS100COMNTOOLS是安裝VS2010後自動新增的一個環境變數,set VSINSTALLDIR=%VS100COMNTOOLS%....就獲得了VS2010的安裝目錄)、PATH(執行指令碼的路徑,在預設PATH的基礎上新增了%WEBKIT_DIR%ToolsScripts和%CYGWIN_DIR%bin);最後指令碼直接啟動了Cygwin。
針對基於VS2010的編譯,Ashod對pdenev指令碼進行了一些修改(這個指令碼本來是WebKit團隊針對VS2005所寫的),自動實現了5、6、7、8的修改。為了保險起見,你可以手動進行一下這些修改。
至於第9個修改,我是在Ashod的博文中看到的。我覺得這個修改不做也沒有影響,同時我也不確定Ashod所寫的pdenev中是否自動實現了這個修改,但是我確定進行這個修改不會導致編譯失敗。
根據經驗,標頭檔案並不是編譯單元,編譯器會直接用標頭檔案的內容替換#include的位置。但是,我在編譯的過程中發現ImageSourceCG.h、SocketStreamHandle.h和SocketStreamError.h這三個標頭檔案就好像被單獨編譯了,因而在單獨編譯的時候因為找不到某些符號而報錯,而config.h所包含的那些標頭檔案中對這些符號進行了完整的定義。於是乎,我新增了第11步中的幾行程式碼以確保這三個標頭檔案始終能找到所需的符號。
第12步所做的操作是為了一個連結錯誤,這個錯誤產生的原因是編譯時用Release模式去連結了一個Debug編譯出的lib,或者用Debug模式連結了Release編譯的lib。加入12中的那個巨集就遮蔽了匹配檢測,從而避免了這個錯誤。
以上摘抄自:http://blog.csdn.net/wxdvc/article/details/8508077,有點兒小的修改。
出錯處理:
1.error MSB6001: Invalid command line switch for "CL.exe". Item has already been added. Key in dictionary: 'tmp' Key being added: 'TMP'
解決方法:使用Notepad+開啟cygwin//etc//profile檔案,將其中的原始碼註釋為如下格式,註釋前程式碼前沒有‘#’(此為註釋符號),下面是註釋後的樣子。
# ORIGINAL_TMP=$TMP
# ORIGINAL_TEMP=$TEMP
# unset TMP TEMP
# tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
# temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
# TMP="/tmp"
# TEMP="/tmp"
2.開始編譯
如果這些操作都順利完成,你就可以雙擊vs2010-build-env.cmd嘗試編譯了。在Cygwin命令列中你需要輸入:
cpan HTTP::Date(這個操作可能只在第一次編譯的時候要用到,事實上與環境相關)。
update-webkit(這個操作每個原始檔資料夾第一次編譯的時候要用到,下載並安裝WebKitAuxiliaryLibrary.zip)。
build-webkit --debug | tee log.txt。
順帶留個qq:345271592,歡迎交流。
1.安裝VS2010,最好是英文版,並使用預設路徑安裝(沒敢換,怕出錯。。。坑爹)
2.安裝SP1:Visual Studio 2010 SP1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=23691,下載連結: http://download.microsoft.com/download/E/B/A/EBA0A152-F426-47E6-9E3F-EFB686E3CA20/VS2010SP1dvd1.iso,檔案大小:1.48GB),最好也用英文版的。。。。
3.安裝Windows SDK 7.1.(容易出錯)(下載頁面:Windows SDK 7.1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=8442,下載連結: http://download.microsoft.com/download/F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDK_EN_DVD.iso,檔案大小:567MB)注意需要根據自己的機器進行選擇,64位與32位是不同的)
錯誤如下,可能有些錯誤,有些機器不會遇到,以下是我遇到的錯誤:
1>.出錯內容:Installation of the "Microsoft Windows SDK for Windows 7" product has reported the following error: Please refer to SamplesSetupHTMLConfigDetails.htm document for further information.
解決辦法:在控制皮膚裡解除安裝:Microsoft Visual C++ 2010 x86 Redistributable和Microsoft Visual C++ 2010 x64 Redistributable兩項,也許你的是一項,總之解除安裝就對了。(另外可參考:http://www.cnblogs.com/duanshuiliu/archive/2013/04/02/2994776.html)
參考地址:http://support.microsoft.com/kb/2717426
2>.出錯內容:A problem occurred while installing selected Windows SDK components.
Installation of the "Microsoft Windows SDK for Windows 7 Compilers for x86" product has reported the following error: 安裝時發生嚴重錯誤
Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page at http://go.microsoft.com/fwlink/?LinkId=130245.
解決辦法:安裝SDK ver7.1時不要勾選Visual C++ compiler,裝完後安裝KB2519277
4.安裝QuickTimeSDK
該SDK下載比較麻煩,需要申請AppleID等等,我已經上傳到我的資源中,供大家下載使用,資源中有三部分,前兩個可能不會用到,只是下載時我一併下載了,主要用到quicktimesdk.zip中的exe安裝。(下載頁面:http://developer.apple.com/quicktime/download/,下載連結: http://adcdownload.apple.com/QuickTime/quicktime_7.3_sdk_for_windows/quicktimesdk.zip,檔案大小:2.02MB)
5.安裝DirectX SDK(下載頁面:http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=2c7da5fb-ffbb-4af6-8c66-651cbd28ca15,下載連結: http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe,檔案大小:554MB),這個需要驗證系統是否正版,照著流程做完就可下載了,盜版我不知道能否下載到。
6.編譯過程:
與原始檔資料夾相關的修改
現在假設你的原始碼資料夾名為WebKitSource。以我為例,我解壓原始檔壓縮包之後得到的資料夾WebKit-r128959就相當於這裡的WebKitSource資料夾。
將WebKitSupportLibrary.zip拷貝到WebKitSource下。注意,不要解壓。
以下的vs2010-build-env.cmd和pdenenv在我的資源中下載即可。
將vs2010-build-env.cmd拷貝到WebKitSource下,修改其中set CYGWIN_SOURCE_DIR=C:cygwin等號右邊的值,即你電腦中Cygwin的安裝目錄。另外,我將CYGWIN_DIR設定為C:cygwin_dir,你可以根據自己的需要修改。
將pdenenv拷貝到WebKitSource/Tools/Scripts下覆蓋原版。
將WebKitSource/Source/WebCore/Modules/quota中的檔案全部拷貝到WebKitSource/Source/WebCore/storage中去。
用VS2010開啟WebKitSource/Source/WebKit /win/ WebKit.vcproj / WebKit.sln,IDE會彈出一個Conversion Wizard告知你需要對方案(solution)或工程(project)進行轉換,點選下一步完成轉換。
將WebKitSource/Tools/vcbin下的cl.exe和midl.exe重新命名為cl-.exe和midl-.exe(即讓它們失效)。
開啟WebKitLibraries /win/ tools/ vsprops/ common.props,修改TreatWarningAsError為false。
開啟 Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def,刪除
其中的“?nullptr@@3Vnullptr_t@std@@A”。
找到 WebKitSource/ Source/ WebCore/ platform/ network/ curl/ CookieJarCurl.cpp和 WebKitSource/ Source/ WebCore/ platform/ image-decodersImageDecoder.cpp,右鍵開啟Properties選單,選擇Configuration Properties>General,修改Item Tyep為C/C++ compiler。(10月9日後記:我嘗試找了一下這兩個原始檔竟然沒找到,我當初的確修改過,此問題留待修改)注意:上述修改是在vs2010的編譯器中進行。
開啟WebCore/ platform/ LocalizedString.cpp,在264行和266行中有"Look Up “%@”"和"Look Up “<selection>”"注意%@和<selection>兩邊的雙引號是全形的,然後刪除這些全形的引號即可。
開啟WebKitSource/Source/WebCore/platform/ graphics/ cg目錄下的ImageSourceCG.h、WebKitSource/Source/WebCore/platform/ network/ cf目錄下的SocketStreamHandle.h和SocketStreamError.h三個標頭檔案,在#define xxx_h(以ImageSourceCG.h為例xxx_h就是ImageSourceCG_h)這行後面新增:
#ifndef ExportMacros_h
#include "config.h"
//你可以取消下面這行的註釋,在編譯過程中可能會看到我寫的提示資訊
//#pragma message("===>缺少定義,手動引入config.h")
#endif
在TestWebKitAPI工程的config.h(WebKitSource/ Tools/ TestWebKitAPI/ config.h)首部新增:#define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
Ashod編寫(我新增了一些中文註釋)的vs2010-build-env.cmd首先建立了一些連結,這樣你就不必再把WebKitSource資料夾移動到Cygwin的使用者目錄下了;然後設定了一些必要的環境變數:WEBKITOUTPUTDIR(編譯結果的輸出目錄)、WEBKITLIBRARIESDIR(WebKit相關庫的目錄)、VSINSTALLDIR(VS100COMNTOOLS是安裝VS2010後自動新增的一個環境變數,set VSINSTALLDIR=%VS100COMNTOOLS%....就獲得了VS2010的安裝目錄)、PATH(執行指令碼的路徑,在預設PATH的基礎上新增了%WEBKIT_DIR%ToolsScripts和%CYGWIN_DIR%bin);最後指令碼直接啟動了Cygwin。
針對基於VS2010的編譯,Ashod對pdenev指令碼進行了一些修改(這個指令碼本來是WebKit團隊針對VS2005所寫的),自動實現了5、6、7、8的修改。為了保險起見,你可以手動進行一下這些修改。
至於第9個修改,我是在Ashod的博文中看到的。我覺得這個修改不做也沒有影響,同時我也不確定Ashod所寫的pdenev中是否自動實現了這個修改,但是我確定進行這個修改不會導致編譯失敗。
根據經驗,標頭檔案並不是編譯單元,編譯器會直接用標頭檔案的內容替換#include的位置。但是,我在編譯的過程中發現ImageSourceCG.h、SocketStreamHandle.h和SocketStreamError.h這三個標頭檔案就好像被單獨編譯了,因而在單獨編譯的時候因為找不到某些符號而報錯,而config.h所包含的那些標頭檔案中對這些符號進行了完整的定義。於是乎,我新增了第11步中的幾行程式碼以確保這三個標頭檔案始終能找到所需的符號。
第12步所做的操作是為了一個連結錯誤,這個錯誤產生的原因是編譯時用Release模式去連結了一個Debug編譯出的lib,或者用Debug模式連結了Release編譯的lib。加入12中的那個巨集就遮蔽了匹配檢測,從而避免了這個錯誤。
以上摘抄自:http://blog.csdn.net/wxdvc/article/details/8508077,有點兒小的修改。
出錯處理:
1.error MSB6001: Invalid command line switch for "CL.exe". Item has already been added. Key in dictionary: 'tmp' Key being added: 'TMP'
解決方法:使用Notepad+開啟cygwin//etc//profile檔案,將其中的原始碼註釋為如下格式,註釋前程式碼前沒有‘#’(此為註釋符號),下面是註釋後的樣子。
# ORIGINAL_TMP=$TMP
# ORIGINAL_TEMP=$TEMP
# unset TMP TEMP
# tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
# temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
# TMP="/tmp"
# TEMP="/tmp"
在上述應用的作者解決方法中,說只註釋unset TMP TEMP一行即可。
2.開始編譯
如果這些操作都順利完成,你就可以雙擊vs2010-build-env.cmd嘗試編譯了。在Cygwin命令列中你需要輸入:
cpan HTTP::Date(這個操作可能只在第一次編譯的時候要用到,事實上與環境相關)。
update-webkit(這個操作每個原始檔資料夾第一次編譯的時候要用到,下載並安裝WebKitAuxiliaryLibrary.zip)。
build-webkit --debug | tee log.txt。
build-webkit --debug | tee log.txt是以Debug模式進行編譯,同時將編譯資訊輸出到Cygwin使用者目錄下log.txt中去。你完全可以寫成C:log.txt或C:/log.txt以便檢視log。另外,我在編譯的過程中會使用tee logMMDDHHMM.txt(如log05211314.txt就代表5月21日13點14分的log,我的不能成功顯示成這個樣子,不知原因),推薦大家這樣做,儲存log對於診斷並解決錯誤至關重要。
編譯成功後,執行上述作者所說的MiniBrowser遇到一下錯誤:Failed to determine path to Apple Application Support directory.
解決辦法:參照http://www.cnblogs.com/xyz2abc/archive/2012/04/09/2438913.html地址所述方法,注意要新增的位置,萬萬注意。
相關文章
- Webkit 核心初探WebKit
- hi3520d核心編譯編譯方法編譯
- 如何編譯 Linux 核心編譯Linux
- linux核心修改編譯Linux編譯
- Linux核心模組編譯Linux編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- Centos8編譯安裝核心CentOS編譯
- Linux編譯核心 Ubuntu18.04 -2020.11.04Linux編譯Ubuntu
- nanoPI編譯核心的一些recordNaN編譯
- Nexus6P 7.1.2 核心編譯修改 TracerPid編譯
- 編譯安裝最新的Linux系統核心編譯Linux
- 核心與裝置樹編譯與燒寫編譯
- 04_Linux下把驅動編譯進核心Linux編譯
- 在 21 世紀該怎樣編譯 Linux 核心編譯Linux
- A40i &T3 全原始碼編譯-ARM Linux核心在PC Linux的編譯方法原始碼編譯Linux
- 香橙派編譯linux核心支援ebpf和虛擬WIFI編譯LinuxeBPFWiFi
- Ubuntu20.04linux核心(5.4.0版本)編譯準備與實現過程-編譯過程(2)UbuntuLinux編譯
- Java編譯與反編譯Java編譯
- webkit 瀏覽器內幕之HTML 直譯器和DOM 模型WebKit瀏覽器HTML模型
- libusb android ndk編譯--編譯mipsAndroid編譯
- hadoop編譯—+2.x編譯Hadoop編譯
- N1064編譯鏈編譯編譯
- #Webkit 翻譯# Web 檢查器中的圖層視覺化工具WebKit視覺化
- 編譯編譯
- 求助 :ubuntu 編譯核心後(make -jn),sudo make modules_install報錯Ubuntu編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- Make編譯之編譯32bit ffmpeg編譯
- 開源編譯工具和編譯軟體編譯
- 編譯VIM編譯
- 編譯版本編譯
- 交叉編譯編譯
- 編譯googletest編譯Go
- 編譯宏編譯
- 編譯 ncurses編譯
- freeswitch 編譯編譯
- 編譯原理編譯原理
- 編譯 zsh編譯
- 編譯 git編譯Git
- openXLSX編譯編譯