我正在尝试使用Visual Studio 2008和STLPort 5.2.1为x86 Windows CE编译Boost 1.47。我可以成功编译x86 Windows和ARMV4I Windows Mobile 6.5。
当我运行bjam时,我在大多数模块中都会收到此错误:
stlport\ctype.h(42) : fatal error C1083: Cannot open include file: '../1/ctype.h': No such file or directory
错误在STLPort的ctype.h中引用的那行代码是:
#include _STLP_NATIVE_C_HEADER(ctype.h)
如果我创建一个新的Visual Studio项目并添加以下行:
#define STR1(x) #x
#define STRINGIZE(x) STR1(x)
#pragma message (STRINGIZE(_STLP_NATIVE_C_HEADER(ctype.h)))
我看到:<../X86/ctype.h>
正如我所料。
为什么升级用“1”代替“X86”?编译ARMV4I Windows Mobile或x86 Windows时没有此问题。
修改
更多信息。有些东西非常故意在“X86”上进行字符串替换。
在stlport \ stl \ config_evc.h中我将pragma message
添加到此代码中:
# if !defined (_STLP_NATIVE_INCLUDE_PATH)
# if defined (_X86_)
# if defined (_STLP_WCE_TARGET_PROC_SUBTYPE_EMULATOR)
# define _STLP_NATIVE_INCLUDE_PATH ../Emulator
# else
# define _STLP_NATIVE_INCLUDE_PATH ../X86
# pragma message (STRINGIZE(../abcdefg))
# pragma message (STRINGIZE(../X86))
# pragma message (STRINGIZE(_STLP_NATIVE_INCLUDE_PATH))
# endif
输出结果为:
../abcdefg
../1
../1
答案 0 :(得分:4)
您已定义X86
宏(由较早包含的标头之一或命令行)并设置为1
,因此它会像宏一样扩展。 #undef X86
将摆脱它。