【问题标题】:#error you must define the platform macro#error 你必须定义平台宏
【发布时间】:2012-08-20 12:27:28
【问题描述】:

我有一个正在编译的项目,它给了我以下错误:

In file included from c:/acrobatxsdk/Adobe/Acrobat 10 SDK/Version 1/PluginSupport/Headers/API/PIMain.c:21:0:
c:/acrobatxsdk/Adobe/Acrobat 10 SDK/Version 1/PluginSupport/Headers/API/Environ.h:37:2: error: #error You must define the PLATFORM macro
c:/acrobatxsdk/Adobe/Acrobat 10 SDK/Version 1/PluginSupport/Headers/API/Environ.h:41:10: error: #include expects "FILENAME" or <FILENAME>
c:/acrobatxsdk/Adobe/Acrobat 10 SDK/Version 1/PluginSupport/Headers/API/Environ.h:52:2: error: #error PLATFORM failed to #define ACCB1

PIMain.c 看起来像这样:

#if WIN_PLATFORM
#include "WinCalls.h"
#elif MAC_PLATFORM
#include "MacCalls.h"
#elif UNIX_PLATFORM
#include "UnixCalls.h"
#else
#error platform not defined
#endif

我知道,如果需要,唯一的修改是在 Environ.h 中进行,有人可以建议怎么做吗?

【问题讨论】:

  • 你不明白哪一部分?如果它不是您的项目....您必须创建宏。还要粘贴真实代码而不是错误。我们对此无能为力。
  • 好吧,我将 ../adobe/API 中的 PIMain.c 和 PIMain.h 包括在内,因此值得犯错误
  • 您在哪个平台上运行?代码期望定义WIN_ENV__OS2__unix__unix。见koders.com/c/…
  • 当你说你“正在包括 PIMain.c”时,你的意思是你用它来构建,还是你实际上使用 #include 指令来包括它?如果是最后一次,那就不要了!源文件不包括在内,它们将被编译和链接。
  • netbeans 7.1 与 Mingw 4.6.1 和 MSYS

标签: c++ macros cross-platform c-preprocessor


【解决方案1】:

Environ.h 正在寻找PLATFORM 指令,如果您没有定义它,有一个预处理器或编译时标志可以“抛出”错误。在此处查看#error 指令的工作原理(MSDN link)

我找到了Environ.h的代码:

#ifndef PLATFORM
#ifdef WIN_ENV
#define PLATFORM "winpltfm.h"
#elif __OS2__
#define PLATFORM "os2pltfm.h"
#elif defined(unix) || defined(__unix)
 #define PLATFORM "UnixPlatform.h"
#else
#error You must define the PLATFORM macro
#endif
#endif

您显然没有在受支持的平台上运行。

【讨论】:

  • 那么我应该在这里做些什么改变
  • @LindaHarrison:如果您的编译器没有明确设置,我认为您需要设置 WIN_ENV。
  • 我已在预处理器定义中将此设置为 WIN_ENV
  • 你只需要这样做:#define WIN_ENV.. 只要它被定义,它就不必被设置为任何东西。
猜你喜欢
  • 2018-06-25
  • 2011-03-11
  • 2020-02-23
  • 2022-09-26
  • 1970-01-01
  • 2011-01-17
  • 2023-01-20
  • 2015-07-14
  • 2022-10-05
相关资源
最近更新 更多