错误编译提升

时间:2011-10-18 18:34:53

标签: c++ boost compiler-errors windows-ce

我正在尝试使用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

1 个答案:

答案 0 :(得分:4)

您已定义X86宏(由较早包含的标头之一或命令行)并设置为1,因此它会像宏一样扩展。 #undef X86将摆脱它。