icu編譯
⑴ 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 是一個利用資源包的好樣例。
⑵ php7安裝intl擴展和linux安裝icu
一 PHP intl 是國際化擴展,是ICU 庫的一個包裝器。所以在安裝PHP intl擴展前要先安裝ICU庫,安裝ICU庫的具體步驟::
二 安裝intl擴展
1:進入php7.2.5源碼:
2:運行:phpize ,找不到命令時,將路徑補全:/usr/local/php7/bin/phpize(是php的安裝路徑),出現如下:
Configuring for:
PHP Api Version: 20100412
Zend Mole Api No: 20100525
Zend Extension Api No: 220100525
3:運行配置
./configure --enable-intl --with-icu-dir=/usr/local/icu/ --with-php-config=/usr/local/php7/bin/php-config
注:前面路徑為icu的安裝路徑,後面路徑為php的安裝路徑。
4:編譯擴展:make
5:復制擴展到目標文件夾
cp /user/local/php/php7.2.5/ext/intl/moles/intl.so /user/local/php7/lib/php/extensions/no-debug-non-zts-20170718
注意:也可以find / -name intl.so 查找。
6:設置擴展加入配置文件中:
[intl]
extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20170718/"
extension=intl.so
大坑:::採用phpinfo()時,無法找到配置的intl擴展,說明配置沒有生效。。。。。。
原因:在編譯php時沒有 --with-config-file-path=PATH 指定php.ini路徑,默認的路徑為/usr/local/php7/lib,只需要將php.ini放入這個默認的路徑即可。你也可以安裝配置php時加入,如下:
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-pcntl --with-curl --with-fpm-user=nginx --enable-ftp --enable-session --enable-xml --with-apxs2=/usr/bin/apxs
訪問:index.php中phpinfo()文件。
⑶ 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
可能是環境變數沒有配置好,請使用絕對路徑,而不是相對路徑。
⑷ 如何在VS2015中集成QT5.5
1. 首先,我們下載源碼包,加壓源碼包到磁碟。
2. 由於編譯QtWekbit需要ICU andANGLE 庫,ICU庫需要單獨下載和編譯,下載ICU4Cversion 56.1並解壓到磁碟,目錄位置參見隨後說明。
3. 在Qt 5.5.1的源碼包中還存在一個BUG,如果直接編譯的話在編譯QT3D模塊的時候會報沒有找到Zlib.h的錯誤而中斷編譯,所以參照如下提示修改qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp目錄下的assimp.pri文件。可參考地址codereview.qt-project.org/...mp.pri。
4. 在編譯QT5.5.1之前還需要安裝配置一下的工具和環境:
5. 經過上面的步驟可以開始進行編譯ICU4C version 56.1和QT5.5.1的源碼了
6. 如果以上的配置都正確的話開機讓機器編譯幾個小時後就可以在目標路徑下生成QT5.5.1的運行文件。
⑸ 如何從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,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時,還是可以寫的比較簡單的。
⑹ 如何在windows下編譯Chrome源代碼
一,編譯之前的准備。
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為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。