【问题标题】:FFTW _GNUC_ is not defined as a preprocessor macroFFTW _GNUC_ 未定义为预处理器宏
【发布时间】:2018-12-18 07:28:26
【问题描述】:

我已将FFTW 库链接到来自this 网站的虚幻引擎项目。但是现在当我尝试将头文件包含到我的项目中时,我得到了错误:

'__GNUC__' 未定义为预处理宏,
用 '0' 替换 '#if/#elif'

我不知道如何解决这个问题。我不想弄乱代码本身,因为我认为它非常好。链接库时我忘记了什么吗?我还尝试将头文件包含为 C 库。 任何帮助将不胜感激。

IDE:Visual Studio 2017 社区

操作系统:Windows 10 Pro 64x

UE4 版本:4.20

【问题讨论】:

  • 鉴于您的错误,我认为您还需要提供您的环境。至少编译器和操作系统。祝你好运!
  • __GNUC__ 在使用 VS 编译时未定义(这些宏由所有使用 C 预处理器的 GNU 编译器定义:C、C++、Objective-C 和 Fortran) - 来自 gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html确定这是错误而不是警告?
  • 我很确定这是一个错误,因为我在 Visual Studio 和虚幻引擎中都得到了它imgur.com/a/z0Bdtrb 编辑:啊,抱歉,这确实是一个编译器警告,它只是显示为错误,但我仍然无法构建我的解决方案
  • 但我仍然无法构建我的解决方案因为?
  • 您必须启用“将警告视为错误”。检查您的编译器/链接器选项。

标签: c++ unreal-engine4 fftw


【解决方案1】:

UnrealEngine 似乎将许多警告视为错误,因此在尝试与产生这些警告的 3rd 方库一起使用时会导致麻烦。通常最好修复代码以避免警告,但我认为您不能出于任何原因。

在这种特殊情况下,您可以设置:

bEnableUndefinedIdentifierWarnings = false;

在您的 *.Build.cs 类构造函数中。


如果这不是 UnrealEngine,而是 Visual Studio C++,您也可以尝试将其放在导致警告的代码之前(例如,在包含您收到警告的标头之前):

#pragma warning(disable: 4668)

https://docs.microsoft.com/en-us/cpp/preprocessor/warning?view=vs-2019

或者禁用它作为编译标志:

/wd4668

https://docs.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level?view=vs-2019

一般来说,如果您得到一些您认为不应该是错误的信息,如果给出的错误编号(此处为 C4668)通常不是警告,请搜索网络。如果是,那么这允许像上面那样快速破解。

【讨论】:

  • 只是想说谢谢你的回答!我使用构造函数中提到的布尔值获得了与 Unreal 一起使用的第三个库!是否正确理解真正的问题是虚幻引擎使用比大多数其他将一些警告升级为错误的 C++ 应用程序更高的警告/错误标志?
  • UE4 创建者决定增加一些额外的警告,并将所有警告设置为错误,以便每次失败都需要修复。这是一种很常见的做法,但通常当您使用 3rd 方代码时,它只会按照那些更严格的规则进行编译——因此您无需在自己的代码中担心它们。然而,UE4 有自己的构建系统,可以将这些规则强加于您的代码(包括您添加的第 3 方库)。您在其中添加的第 3 方库可能会使用比 UE4 更多的警告检查,但除非它是 UE4 错误的超集(不太可能),否则 UE4 可能会抱怨某些事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2011-02-12
  • 2019-10-17
  • 2010-10-17
相关资源
最近更新 更多