linux平台下要編譯安裝除gcc和gcc-c++之外,還需要兩個開發庫:bzip2-devel 和python-devel,因此在安裝前應該先保證這兩個庫已經安裝:
#yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs python-devel -y
然後是去官網下載源碼包,按照如下步驟:
#tar xvzf boost_1_50_0.tar.gz
進入boost_1_50_0目錄:
#cd boost_1_50_0
然後是編譯安裝,boost源碼包中有配置腳本,直接用就可以:
#sh ./bootstrap.sh
Building Boost.Build engine with toolset gcc... tools/build/v2/engine/bin.linuxx86_64/b2
Detecting Python version... 2.6
Detecting Python root... /usr
Unicode/ICU support for Boost.Regex?... not found.
Generating Boost.Build configuration in project-config.jam...
Bootstrapping is done. To build, run:
./b2
To adjust configuration, edit 'project-config.jam'.
Further information:
- Command line help:
./b2 --help
- Getting started guide:
http://www.boost.org/more/getting_started/unix-variants.html
- Boost.Build documentation:
http://www.boost.org/boost-build2/doc/html/index.html
接下來就是編譯,重點關注是否編譯成功:
#./b2
Ⅱ 怎樣重新安裝icui40.dll
【首先給出99%情況下都能解決這個問題的最簡單辦法】:下載並安裝微軟VC++2005版運行庫(英文全稱:MicrosoftVisualC++2005RedistributablePackage) 出現丟失msvc類dll提示的本質原因是這個程序是用VC++編譯的,要運行此類程序電腦上就必須先安裝它所需要的VC++運行庫,VC++運行庫主要有200520082010201220132015這6個年份的版本,每個年份版本還分為32位版和64位版,各個版本之間互相獨立,比如某程序需要2008版VC++,那你安裝的是最新的2015版就沒有什麼用。比如某程序需要的是32位版的VC++2015,你安裝的是64位版的VC++2015,也沒有用。 【注意】:如果是32位程序出現這個丟失的提示就安裝32位(x86)版VC++,64位程序就安裝x64版。實在分不清就兩個版本都裝了,也沒壞處。 重申:安裝哪個版本跟你的系統是否64位版並沒有關系!是要看調用VC++的那個程序本身是32位還是64位! 關於附件:VC++運行庫修復工具是很容易搜到下載的,也可以直接下載我附件(上傳附件僅僅是為了下載方便,也可以直接搜索下載),附件免費下載,不要積分。 7z、rar、zip文件要用解壓縮軟體打開,x86版就是32位版,請不要再問出「為什麼只有86位版」之類搞笑的問題。 密碼:2xur 【下面給出吐槽和解釋,不想看的可以不看】:呵呵,vc++已經更新到了2015版,msvcp類文件的版本號刷到了140,而大部分解決方案還在用不知道哪個年代就開始祖傳的復制貨,又是95又是Me的,特么現在還有人用Windows95系統?敢不敢復制粘貼之前自己試一試?敢不敢修改一下把祖傳了十年的答案加上Windows8.1、Windows10?在此強烈建議大家抵制不論什麼dll都只會下載這個文件丟到系統盤,然後打開cmd用regsvr命令注冊的蠢辦法,這完全是撞大運。有些人試了下上面的辦法可能覺得有用,認為我危言聳聽。那隻是你運氣好,瞎貓碰到死耗子。如果64位系統按照他的說法去把dll文件放到syswow64里,而你要打開的軟體或游戲卻是個32位程序,你看看是不是有用。即使版本對應,你光下載這個dll也未必有效,因為你並沒有安裝vc++運行庫,有些軟體是必須完整安裝VC++運行庫才能運行的。這還僅僅是vc++的dll的情況,有些dll,例如steam_api.dll這特么就是某些游戲的免steam破解補丁的文件,是應該放在游戲目錄下的,有些逗比也告訴別人下載這個dll放到system32。在它們(就是它們,我沒打錯)眼裡,所有dll都是可以下載放到system32或syswow64注冊解決的。這群類人生物真是人類進步的滑梯。 至於回答重裝系統的,那就更加呵呵了。除非是被人修改過的系統鏡像,否則微軟任何原版系統都不自帶VC++運行庫,重裝一萬遍也不可能解決msvcp類dll的丟失問題。因為「丟失」其實並不是丟失,是原本就沒有!另:msvcp、msvcr、vcomp140.dll屬於VC++2015版msvcp、msvcr、vcomp120.dll屬於VC++2013版msvcp、msvcr、vcomp110.dll屬於VC++2012版msvcp、msvcr、vcomp100.dll屬於VC++2010版msvcp、msvcr、vcomp90.dll屬於VC++2008版msvcp、msvcr60、71和80.dll,以及vcomp.dll(不帶數字版本號)屬於VC++2005版除了丟失、缺少這類錯誤之外,如果一個程序打開之後提示「並行配置錯誤」,那麼也是因為沒有安裝VC++運行庫。 出現這種情況,而你又不知道應該安裝哪個版本,一個個試起來又覺得太麻煩的話,建議使用DLL修復工具,這個工具是會在檢測修復DirectX的同時順便安裝所有版本的VC++運行庫的,也能解決msvcp之類的丟失問題。注意,必須是增強版,其他版沒有VC++。
Ⅲ android 怎麼使用icu
如果只是測試修改後效果,執行步驟A即可;如果需要build後生效,則需要執行全部步驟
A. 在臨時目錄中編譯ICU資源
1. 在external/icu4c下新建臨時目錄icubuild,進入icubuild目錄
$mkdir external/icu4c/icuBuild
$cd external/icu4c/icuBuild
2. 執行icuConfigureRun Linux命令,生成make文件
$.././runConfigureICU Linux
3. 執行make -j2命令,
$make -j2
對於GB版本,如果make -j2出錯,需要用mtk提供的文件(Android 2.3 make-j2 ERROE.rar)替換(需要備份原文件)。
4. 將生成的external/icu4c/icuBuild/data/out/tmp/icudt44l.dat push到手機測試
$adb remount
$adb push external/icu4c/icuBuild/data/out/tmp/icudt44l.dat system/usr/icu/
$adb reboot
ICS對應的是icudt46l.dat,
JB以及以後版本是icudt48l.dat
B. COPY所需文件
1、將第一步生成的externalicu4cicubuilddataout mpicudt44l.dat復制到externalicu4cstubdata下並改名為icudt44l-all.dat,覆蓋原來的同名文件。
2、對於GB版本,從ICS工程上拷貝路徑prebuildlinux-x86icu-4.4文件夾,放到相應的路徑下
ICS版本是icudt46l.dat和icudt46l-all.dat
JB及以上是icudt48l.dat和icudt48l-all.dat
C. 配置環境變數
重新配置環境變數(如果不配置正確會導致執行腳本出錯)。以我的系統為例,配置過程如下:
1. 在終端中進入/proj/mtk71491/Desktop/GB/alps目錄即:
$cd /proj/mtk71491/Desktop/GB/alps
2. 然後執行腳本(等價於./ build/envsetup.sh):
$source build/envsetup.sh
3. 配置環境變數(注意「=」前後不要有空格)。
$export ANDROID_EABI_TOOLCHAIN=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/(JB2以及以上不執行此步驟)
$export LD_LIBRARY_PATH=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/icu-4.4/(JB以及上以跳過這一步)
$export ANDROID_BUILD_TOP=/proj/mtk71491/Desktop/GB/alps/
執行完沒有任何提示說明配置成功。
D. 執行腳本,重新生成.dat文件
執行腳本,如果遇到文檔印尼語錯誤請用MTK提供的腳本(icu_dat_generator.rar)替換後再執行,如下所示:
1. 進入/proj/mtk71491/Desktop/GB/alps/external/icu4c/studdata目錄
$cd external/icu4c/studdata
2. 執行腳本
$./icu_dat_generator.py 4.4 (ICS及以後版本執行$./icu_dat_generator.py)
如果該腳本執行成功,則會更新一遍stubdata下的icudt44l-**.dat這些文件,如果看到這些文件的修改時間變成了最新的時間,就說明已經重新生成真正最後起 作用的是icudt44l-large.dat這個文件。
ICS版是icudt46l-default.dat
JB以及以上是icudt48l-default.dat
E. 重新編譯工程
一般修改後都是重新編譯工程來測試效果,使用remake android命令即可.
F. 如果執行./icu_dat_generator.py報以下錯誤
Traceback (most recent call last):
File ./icu_dat_generator.py, line 296, in
main()
File ./icu_dat_generator.py, line 261, in main
icu_version = re.sub(r([^0-9]), , os.path.basename(input_files[0]))
IndexError: list index out of range
可能是環境變數沒有配置好,請使用絕對路徑,而不是相對路徑。
Ⅳ ICU(International Component for Unicode)有什麼作用
International Component for Unicode (以下簡稱 ICU)
是一套穩定成熟、功能強大、輕便易用和跨平台支持Unicode 的開發包,使得開發人員在 C/C++ 和 Java
上開發全球化軟體產品更容易,ICU 是由 IBM 發布和維護,並且是開放源代碼的。
ICU
可以根據客戶端的語言環境給客戶返回最接近語言的字元串,也就是說客戶端可能與伺服器端的語言環境不一致,不能只根據伺服器端的語言來返回字元串。而且將
來單獨增加或維護資源文件,不需要重新生成可執行文件或動態鏈接庫。為了提高重用性,最好將所有資源信息統一管理,不是每個模塊各自維護管理。如下圖1所
示:
http://www.ibm.com/developerworks/cn/opensource/os-mfc2icu/index.html
而 Microsoft Foundation Class(以下簡稱
MFC)是資源和程序模塊合在一起的,即每個模塊下都有多個資源文件路徑,如 neutral、en-US、ja-JP 和 zh-CN
等,它們分別代表與語言無關不需要翻譯的、英文、日文和簡體中文等資源信息,每個資源路徑下都有個擴展名是 .RC
的文件,里邊存放的是相應語言每個標識(ID)對應的字元串。每次編譯都是將所有的語言字元串和源代碼一起生成看執行文件或動態鏈接庫。當運行時只能根據
所在系統的語言環境返回相應的字元串。如下圖2所示:
圖2:MFC 資源管理框架示意圖
由此可見,ICU 更靈活,可以支持不同語言之間的交流,而且維護更容易,再增加額外的語言也方便,幾乎不用修改源代碼,並且 ICU 是跨平台的,不僅僅可以用在 Windows 上,也可以用在 Linux、AIX、Solaris 和 HP-UX 等系統上。
要用 ICU 資源架構升級已有 MFC 資源架構,主要考慮兩個方面:一是要提取各個模塊下所有的字元串信息到 ICU
的資源文件;再就是要更新源程序中調用資源的介面(API),在 MFC 資源管理架構中,用的是的 LoadString
函數去讀取相應語言的字元串,我們可以用 ICU4C 的 getStringEx 或 getStringByKey 函數替代
LoadString。
對不同的語言環境(Locale),ICU 可根據不同的 Locale 參數自動使用最恰當的資源包(Resource Bundle)。
ICU 還支持回退(Fallback)機制,盡可能返回用戶最接近的語言,例如在簡體中文環境下,按優先順序依次查找
gb18030.res、_gb18030.res、zh_Hans_CN.res、_zhHans_CN.res、zh_Hans.res、
_zhHans.res、zh.res、root.res 和 _root.res 資源包文件,root 是根資源,一般就將英文資源作為根資源。
回頁首
2 用 ICU 實現對 MFC 資源架構的升級
2.1 對原有 MFC 資源架構中資源信息的提取
MFC 資源模塊有特定格式的資源文件,例如有個模塊 zh-CN 目錄下 rational.rc 文件內容如下:
//Microsoft Developer Studio generated resource script.
//
#include "..\resource.h"
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_EXCEPTION "發生異常。\n"
IDS_ERR_FAILURE "登錄失敗:"%_ARG_%"\n"
END
該資源對應的語言可以根據目錄獲得,ICU 只需要 STRINGTABLE 部分就可,即所有以 STRINGTABLE DISCARDABLE BEGIN開始,以 END 結束部分是我們需要提取的,每個標識(ID)的值在 ..\resource.h 中已定義,如:
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by rational.rc
//
#define IDS_ EXCEPTION 18001
#define IDS_ERR_FAILURE 18002
可以開發出一個自動腳本去提取所有模塊下的標識(ID)和字元串到一個以 UTF-8 編碼的 ICU 格式的資源文件,例如簡體中文資源結果如下:
zh:table {
// String resources from rational/resource.h
// Message id range: 18001 18002
// IDS_EXCEPTION
18001:string { "發生異常。\n" }
// IDS_ERR_FAILURE
18002:string { "登錄失敗:"%_ARG_%"\n" }
}
還要考慮到 ICU 的回退(Fallback)機制,將英文的定義為根(root)資源比較好,這樣英文的 ICU 資源文件就以 root:table { 開頭。
再用 ICU 的資源生成工具 genrb 將不同語言提取出來的文本文件轉換成 ICU 可讀的二進制資源文件,如:
genrb -e utf-8 -p rational -k rational_zh.txt
這樣做成功之後,這些提取出來的資源就可以被 ICU 介面函數調用了。每種語言對應一個資源包,將來要想維護或增加新的語言包,就用類似的方法,不需要重編譯核心模塊代碼了。
2.2 從 MFC資源架構到 ICU 資源架構介面的轉換
有了上面提取出來的 ICU 資源包之後,接下來就是讓源程序中使用 MFC LoadString 函數的都用 ICU
資源讀取函數了,可能會有很多處 LoadString,可以用 C++ 宏(Macro)編譯預處理這個簡便的方法,來達到替換所有的
LoadString。然後我們可以開發出新的利用 ICU 獲得資源的函數 ICULoadString(int uID, CString
value) 如下:
#include "unicode/ures.h"
BOOL ICULoadString(int uID, CString value)
{
UErrorCode err = U_ZERO_ERROR;
int32_t len;
char uID[8];
// ICU 根據客戶端的語言環境打開相應的資源包
UResourceBundle *urb = ures_open(getResPath(), getUserDesiredLocale(), &err);
if (U_FAILURE(err)) {
return FALSE;
}
// 用 ICU 函數獲取該標識對應客戶端語言環境的字元串
sprintf(uID, "%d", ID); // Convert the integer ID to a decimal string
value = CString(ures_getStringByKey(urb, uID, &len, &err));
if (U_FAILURE(err) || value.IsEmpty()) {
ures_close(urb);
return FALSE;
}
ures_close(urb);
return TRUE;
}
Locale 參數可以在客戶端剛連接或會話初始化(Session
initialization)時,就得到客戶端的語言環境信息,程序中就可隨時通過getUserDesiredLocale()
函數獲取該信息,這樣就實現了 ICU 根據客戶端語言環境返回客戶最想得到的語言信息。
回頁首
3 總結
使用 ICU
庫可以簡化我們的工作,更好的滿足了我們的全球化產品需求,而且可靠穩定,也利於將來維護和升級。想要增加更多的語言,不需要為此重新編譯可執行文件或動
態鏈接庫,只要有相應語言的 ICU資源包即可,而且會使產品的層次化和模塊化更好,減小了可執行文件或動態鏈接庫的大小,性能也會更強。
回頁首
提示
1). 注意 ICU 在對簡體中文和繁體中文使用回退機制的時候都有可能會在使用 root 資源之前會合都去查找 zh 資源,注意避免不恰當的讀取。
2). 在 ICU 3.4 以後的版本推薦使用包(Package)代替文件或路徑名構造或打開資源包,即先用 genrb 命令編譯文本文件到
ICU 資源文件,然後使用 pkgdata 命令再將 ICU 資源文件轉成包數據文件,這樣在打開資源包之前先使用 udata_setAppData 或 udata_open 裝入包數據即可。ICU 自帶的示例 ufortune 是一個利用資源包的好樣例。
Ⅳ 如何從android源碼中編譯webkit
android本來自帶了webkit瀏覽器,但是要對其進行custom就需要android源代碼才行, 但是在沒有源碼的情況下,那麼就需要用到ndk了,比如,我是在xoom上做custom webkit的。
1、雖然ndk提供的庫很少,而且沒有skia,但是好在有bitmap,這樣顯示慢了點,沒有硬加速,但不是不可能。
2、webkit需要的第三方庫,freetype,png,jpeg,sqlite3等雖然android源碼中有,但是ndk沒有開放,因此所有的第三方庫,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等都需要用ndk cross-compile成靜態庫,然後鏈接到最終的動態庫中。
3、選擇iconv是icu太大,而且沒有多語言的需求,選擇cairo+pixman是skia的移植性不好,而且cairo支持很多種backend。
4、編譯第三方庫需要用到autoconfig,ndk中有如何生成交叉編譯鏈的文檔,然後在configure時使用這個工具鏈就可以了,但是android用到的是bionic庫,因此會有很少的地方需要修改,有些庫也不能生成test程序,但是靜態庫是沒問題的。
5、利用ndk生成的交叉工具鏈,在加上webkit自帶的cmake編譯系統,生成webkit的動態庫是沒有問題的,當然是webkit的內核,而且有些平台相關的部分代碼需要修改。
6、但是只要是以linux平台為基礎,修改還是很容易的,我移植的webkit是先移植到linux平台上,然後移植到android平台上的,所以修改相對少了很多,但是修改大多都在WebCore/platform下,在選擇了的平台相關庫後,做相應的配置和修改。
7、其次是在WebKit目錄,這個主要是支持和使用WebCore,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時,還是可以寫的比較簡單的。
Ⅵ libicui18n.so makefile中怎麼鏈接QT的動態庫
一般分為動態庫和靜態庫,方法分別如下: 一. 靜態庫的生成 1. 測試目錄: lib 2. 源碼文件名: mywindow.h, mywindow.cpp 3. 編寫項目文件: mywindow.pro 注意兩點: TEMPLATE = lib CONFIG += staticlib 4. 生成Makefile: qmake mywindow.pro 5. 編譯生成靜態庫libmywindow.a make 二. 靜態庫的使用 1. 測試目錄: test 2. 將mywindow.h與libmywindow.a拷貝至test目錄下 3. 編寫main.cpp, 包含頭文件mywindow.h, 並調用MyWindow類 4. 編寫項目文件: test.pro 注意加上庫路徑與庫文件名: LIBS += -L ./ -lmywindow 5. 生成Makefile: qmake test.pro 6. 編譯: make 7. 運行: ./test 三. 動態庫的生成 動態庫編譯基本和靜態庫類似,需要將上述將要進行編譯的項目文件.pro中下面這行去掉 CONFIG += staticlib 按上述操作編譯完後就可以得到以lib開頭並且.so* 結尾動態庫文件,一般有多個。
Ⅶ qt5.2 release版本怎麼去除icudt51.dll這幾個文件
你直接下載的qt編寫的東西,必須帶,這是開源協議
當然,要做到也是可以的,如果不是大公司發布軟體,或者自己學習,不用買商業版,可以去下qt的源碼,然後自己進行靜態編譯lib庫出來,然後就可以直接把文件做成一個exe了,只是很大,我試過,隨便寫點代碼就是六七M
Ⅷ 如何編譯安裝php擴展
一開始安裝PHP的時候,我們並不知道需要哪些擴展,所以只有等到我們真正用到的時候才想辦法去安裝。
安裝PHP擴展最簡單的辦法就是
sudo apt-get install php5-xxx
但有的時候並非我們所願,源裡面並沒有我們需要的擴展,這時候就需要我們下載源碼自己編譯安裝了。
這篇文章中我將介紹在本地Linux平台下編譯安裝PHP擴展的方法。
現在網站根目錄下創建 index.php 列印基本的配置信息,以驗證我們是否安裝成功。
配置編譯環境
我們需要安裝一些編譯必須的庫,還有 php-dev 版本
Ubuntu
sudo apt-get install php5-dev php5-mysql gcc libpcre3-dev
Fedora
sudo yum install php-devel php-mysqlnd gcc libtool
RHEL
sudo yum install php-devel php-mysql gcc libtool
Suse
yast2 -i php5-pear php5-devel php5-mysql gcc
安裝擴展
PHP有兩種可供安裝的擴展:一種是PHP原生的但是默認沒有安裝的,另一種的第三方開發的擴展。
下面依次介紹兩種擴展的安裝方法:
安裝之前我們需要一份和當前機器上相同版本的PHP源碼
cd code
wget http://cn2.php.net/distributions/php-5.5.9.tar.bz2
tar xvjf php-5.5.9.tar.bz2
cd php-5.5.9
前往此處 下載相應的源碼包。
在 /ext 目錄下面可以看到所有PHP原生的擴展。
安裝原生擴展
以 PHP-intl 為例,這是PHP國際化的擴展。
為了安裝這個擴展我們需要先安裝ICU 庫
sudo apt-get install icu-devtools icu-doc libicu-dev libicu52 libicu52-dbg
ICU 安裝成功之後進入/ext/intl 目錄:
cd intl
phpize
./configure --enable-intl
make
sudo make install
下面解釋一下上面的每個命令:
phpize : 是用來擴展php擴展模塊的,通過phpize可以建立php的外掛模塊
./configure --enable-intl: 配置編譯環境,相當於告訴編譯器編譯PHP源碼的時候加上intl這個擴展。
make: 將會把源碼編譯成 intl.so
make install : 將會把 intl.so 移動到當前安裝的 PHP 的擴展目錄。
接下來我們要做的就是在php.ini中啟用這個擴展,這一步將會在最後給出示例。
安裝第三方擴展
將以這個 擴展為例,這個擴展主要實現了PHP識別條形碼的功能。
先安裝必要的依賴
sudo apt-get install pkg-config
git clone https://github.com/mongodb/mongo-php-driver
cd mongo-php-driver
phpize
./configure
make
sudo make install
將會生成一個文件,將其拷貝到PHP的擴展目錄下面。
啟用擴展
在php.ini中啟用擴展的方式有很多:
直接在php.ini文件中添加 extension=mongo.so,這是最簡單直接的方法。
也可以單獨建一個ini文件,然後在php.ini中包含這些文件就可以了。
下面介紹一下第二種方法:
cd `/etc/php5/mods-available`
這個目錄里可以放新建的ini文件,然後執行
sudo touch mongo.ini
echo "extension=mongo.so" | sudo tee -a mongo.ini
sudo touch intl.ini
echo "extension=intl.so" | sudo tee -a intl.ini
上面的命令將會創建ini文件,並且寫如相應的配置信息。
然後執行下面的命令啟用擴展即可(需要安裝 php5enmod 工具):
sudo php5enmod mongo
sudo php5enmod intl
如果未安裝 php5enmod 工具,則需要手動配置:
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/cli/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/cli/conf.d/intl.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/fpm/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/fpm/conf.d/intl.ini
最後在執行一下重啟操作就可以了:
sudo service nginx restart
sudo service php5-fpm restart
Ⅸ 如何只生成 chrome.sln 工程文件以便編譯 chromium
一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在http://src.chromium.org/svn/中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。
2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是http://build.chromium.org/buildbot/archives/chromium_tarball.html。
2,或者採用svn從http://src.chromium.org/svn/trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。
3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 http://src.chromium.org/svn/trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。
3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據http://dev.chromium.org的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。
二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config http://src.chromium.org/svn/trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。
重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None,
},
這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。
2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。
在實際下載過程中,最開始的時候我用TortoiseSVN從http://src.chromium.org/svn/trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。
三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。
四 chrome涉及的開源項目
Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的JavaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
C語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。
Ⅹ 用MATLAB和C++2008混合編程,出現MATLAB:I18n:MissingICUData - ICU data not found
你這個錯誤據說是常見發生在安裝過多個版本的matlab的系統上的,你最好用一個純凈系統來弄。還有一個可能就是32位和64位的問題。
只是很奇怪,如果你追求時間空間效率,就純用C++,C++很多計算的庫。要是只是需要調度或者粘合matlab腳本,用腳本語言多好,何苦用C++?