Header 与mingw32冲突错误(ogre3d+cegui+glm应用)

Header conflict error with mingw32 (ogre3d+cegui+glm application)

我正在升级 ogre 应用程序以使用较新版本的 ogre,并且 运行 使用 mingw 在 windows 上编译时遇到一些问题,因为现在升级了库使用 glm.

我在编译的时候运行出现了一些这样的错误:

In file included from c:\mingw\bin../lib/gcc/i686-w64-mingw32/4.7.3/include/xmmintrin.h:36:0,
from C:/mingw/OgreSDK/include/OGRE/OgreCommon.h:35,
from C:/mingw/OgreSDK/include/OGRE/OgreMath.h:34,
from D:/Users/jacob/Documents/git/ThriveDirectReview2/src/engine/serialization.h:7,
from D:\Users\jacob\Documents\git\ThriveDirectReview2\src\engine\engine.cpp:8:
c:\mingw\bin../lib/gcc/i686-w64-mingw32/4.7.3/include/mmintrin.h:53:1: error: previous declaration of 'void _m_empty()' with 'C++' linkage
In file included from C:/mingw/install/include/glm/core/setup.hpp:549:0,
from C:/mingw/install/include/glm/glm.hpp:89,
from C:/mingw/install/include/cegui-9999/CEGUI/../CEGUI/Size.h:37,
from C:/mingw/install/include/cegui-9999/CEGUI/../CEGUI/Rect.h:33,
from C:/mingw/install/include/cegui-9999/CEGUI/../CEGUI/Image.h:33,
from C:/mingw/install/include/cegui-9999/CEGUI/../CEGUI/BitmapImage.h:30,
from C:/mingw/install/include/cegui-9999/CEGUI/../CEGUI/CEGUI.h:37,
from D:\Users\jacob\Documents\git\ThriveDirectReview2\src\engine\engine.cpp:21:

查看 /glm/core/setup.hpp:549:0 我们有:

if defined(MINGW32) && (GLM_ARCH != GLM_ARCH_PURE)
include intrin.h
endif

所以 ogre(图形库)正在使用 gcc 中的 xmmintrin header,cegui(为 ogre 构建的 gui 库)也在使用 gcc 中的 intrin.h,并且这两个 header s 定义几乎相同的接口并导致冲突。

所有相关的源代码都可以在这里找到: https://github.com/Revolutionary-Games/Thrive/tree/ogre2.0

所以 glm 似乎与 gcc 不兼容,这对我来说似乎很奇怪。更令人惊讶的是 cegui 没有与 ogre 一起工作,所以我的第一步是 post 在 cegui 论坛上:http://cegui.org.uk/forum/viewtopic.php?f=10&t=7024 但他们我们无能为力。

这似乎是一个非常专业的问题,也许对于堆栈溢出来说太专业了,但我希望你能提供帮助,或者给出规避问题的方向的建议!

编辑:发现两个 *intrin 文件都来自 gcc。

这似乎是一个旧的 gcc 错误: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56038

2天无法接受我自己的回答