本文介绍 VC.NET 2003 编译基于 STLport-5.1.3 的 ICU 3.6时遇到的问题及解决办法.
先安装了 STLport-5.1.3 到 C:/STLport-5.1.3. 然后编译 ICU 3.6.
由于 ICU3.6 自带了 allinone.sln, 可以直接用 VC.NET 2003 打开并编译.
但当编译其中的项目 common 时, 在进行到编译资源的时候会报如下错误
正在编译资源...
C:/STLport-5.1.3/stlport/stddef.h(31) : error RC2006: #include expected a file name, found 'newline'
C:/icu4c-3_6-src/icu/source/common/Release/RCa05352(108) : fatal error RC1116: RC terminating after preprocessor errors
经检查,是 ./unicode/umachine.h 中有
#include <stddef.h>
由于安装了 STLport, 所以用的是 STLport 提供的 stddef.h, 即.
C:/STLport-5.1.3/stlport/stddef.h
而它里面实际上通过
# include _STLP_NATIVE_C_HEADER(stddef.h)
来调用本地的 stddef.h
然而,不知什么原因, 此时的 _STLP_NATIVE_C_HEADER 却还没有定义,
所以整个语句展开后仅仅是
#include
于是出现上述错误.
解决的办法是在 ./unicode/umachine.h 文件中, 在
#include <stddef.h>
之前显示定义 _STLP_NATIVE_C_HEADER. 如下:
#if !defined(_STLP_NATIVE_C_HEADER)
#define _STLP_NATIVE_C_HEADER(header) <C://Program Files//Microsoft Visual Studio .NET 2003//Vc7//include//header>
#endif
这样保证宏展开后可以包含到本地的 stddef.h. 问题解决.