用 VC.NET 2003 (VC7.1) 编译 Xerces-c 2.7 和 ICU 3.6.
Xerces-c 是Apache的XML项目, 具有良好的跨平台性,但支持的字符集比较少. 内部表达用 UTF-16. 但对于XML文件解析,支持的字符集比较少.
ICU 是IBM 维护的一套稳定成熟、功能强大、轻便易用和跨平台支持Unicode 的开发包.
将 Xerces和ICU结合起来可以实现实现跨平台的支持多国语言的XML解析库. 下面介绍windows下用 VC.NET 2003 (VC7.1) 编译 Xerces-c 2.7 和 ICU 3.6 的过程.
1. 安装 Perl 5.004 或更高版本.
2. 安装 Cygwin tools.
Cygwin 的缺省安装中不包括zip.exe, 因此在Cygwin 的安装选项中要显式选中 zip 包.
3. 将Perl和Cygwin的bin加入系统路径. 使得在控制台窗口中可以直接访问.
测试方法, 在控制台窗口中分别输入 perl -version 和 uname, 可以看到有意义的输出.
4. 解压 Xerces-C++ source files到某个目录下.其根路径为 'x:/xerces-c-src2_7_0'.
解压 ICU 解压后,其根路径为 'x:/icu'
5. 如果你安装了 STLport 来替代VC.NET 2003自带的 STL, 那么必须进行5.1和5.2步.否则
直接进行第6步. 原因请参考 http://blog.csdn.net/aseity/archive/2007/06/03/1636130.aspx
5.1 找到 x:/icu/source/configure.in 文件中的
#include <stddef.h> (3.6版本中,位于 Line 747)
在这行的前面加上
#if !defined(_STLP_NATIVE_C_HEADER)
#define _STLP_NATIVE_C_HEADER(header) <C://Program Files//Microsoft Visual Studio .NET 2003//Vc7//include//header>
#endif
5.2 找到 x:/icu/source/configure 文件中的
#include <stddef.h> (3.6版本中,位于 Line 7370)
在这行的前面也加上
#if !defined(_STLP_NATIVE_C_HEADER)
#define _STLP_NATIVE_C_HEADER(header) <C://Program Files//Microsoft Visual Studio .NET 2003//Vc7//include//header>
#endif
6. 打开一个命令窗口.
运行 VC.NET 2003 的 VCVARS32.BAT.
8. 运行下列命令
set XERCESCROOT=x:/xerces-c-src2_7_0
set ICUROOT=x:/icu
cd x:/xerces-c-src2_7_0/scripts
9. 将 ICU 作为 Xerces 的字符集转换服务器.运行如下命令
perl packageBinaries.pl -c VC7.1 -x VC7.1 -s x:/xerces-c-src2_7_0 -o x:/xerces-c2_7_0-win32 -t icu
或者将 ICU 作为消息装载器. 运行如下命令
perl packageBinaries.pl -c VC7.1 -x VC7.1 -s x:/xerces-c-src2_7_0 -o x:/xerces-c2_7_0-win32 -m icu
运行 perl packageBinaries.pl 可以看到其它可选参数.
10. 编译完成后.
xxx.lib 文件位于 x:/xerces-c2_7_0-win32/lib 和 x:/icu/lib 下
xxx.dll 文件位于 x:/xerces-c2_7_0-win32/bin 和 x:/icu/bin 下