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为一套用于任意平台与机器的无损数据压缩的库,它免费、自由、无任何法律专利问题。