Compiler errors 如何在Windows 10 32位上使用MinGW编译器为CodeLite构建Ogre3D 2.1的工作副本

Compiler errors 如何在Windows 10 32位上使用MinGW编译器为CodeLite构建Ogre3D 2.1的工作副本,compiler-errors,ogre,Compiler Errors,Ogre,在过去的几天里,我一直在解决一个构建Ogre3D的问题。我正在编译的平台本机支持Opengl Embedded Systems 2,但这些标题似乎不是Ogre依赖项包的一部分 解决问题 Cmake的CodeLite生成器有一个已知的Bug1 该项目是使用cmake构建的,值得注意的是,所有用于CodeLite的cmake生成器都将项目设置为使用-j 0选项构建,这是毫无意义的;没有线程就无法编译。这意味着必须导航到每个项目(其中有9个或10个,具体取决于您是否设法包括ogredeps),并

在过去的几天里,我一直在解决一个构建Ogre3D的问题。我正在编译的平台本机支持Opengl Embedded Systems 2,但这些标题似乎不是Ogre依赖项包的一部分


解决问题
  • Cmake的CodeLite生成器有一个已知的Bug1
该项目是使用cmake构建的,值得注意的是,所有用于CodeLite的cmake生成器都将项目设置为使用
-j 0
选项构建,这是毫无意义的;没有线程就无法编译。这意味着必须导航到每个项目(其中有9个或10个,具体取决于您是否设法包括
ogredeps
),并从每个
.project
文件中删除参数4次。出现这种情况时,编译器会用以下消息来解释此错误:
j'选项需要一个正整数参数
,并停止编译

我已经创建了一个基本脚本来自动化这个过程,它在不到一分钟的时间内执行。可从以下网址获得:。只需安装Python2.7解释器并将脚本放在Ogre构建的根目录中,然后运行它


  • 不包括SDL2 OpenGL嵌入式系统依赖项
编译依赖项的SDL2部分时,我收到以下编译器错误:

C:/OGRE/Dependencies/src/SDL2/include/SDL_opengles2.h:33:31:
    fatal error:
        GLES2/gl2platform.h:
            No such file or directory
C:/OGRE/OgreMain/src/Win32/OgreWinResources.rc:11:0:
    fatal error:
        when writing output to : //not a typo; it's legitimately writing to a null file
            Invalid Argument
我在论坛上发现了一篇帖子,其中一位用户提供了一个评论,对违规内容进行了评论。当然,这会由于缺少引用的库而导致许多代码错误

查找后,似乎不支持Opengl ES 2:

你的支持呢? 计划是最终修复现在已经损坏的GLES2渲染器,同时支持GLES2和GLES3。然而,GLES2的想法是支持它的兼容性,因为它是一个设计非常糟糕的API,但遗憾的是,它存在于数百万Android设备中,不适合高性能。因此,重点将更多地放在兼容性和稳定性上,而不是性能上(无论如何,它应该比在OGRE1.x中更快)。可能还有其他我们无法预测的局限性。 有了GLES3,运行面向性能的移动应用程序应该容易得多

作为一个临时解决方案,我将来自QtANGLE(qt5.7的一部分)的OpenGL ES include文件放入cmake-generated/Dependencies/build/src/SDL2-prefix/src/SDL2-build/include目录。然后,我将SDL_opengles2.h的相关包含修改为本地包含:

#include "GLES2/gl2platform.h"
#include "GLES2/gl2.h"
#include "GLES2/gl2ext.h"
...
#include SDL_opengls2_khrplatform.h"
#include SDL_opengls2_gl2platform.h"
#include SDL_opengls2_gl2.h"
#include SDL_opengls2_gl2ext.h"
我可能在链接正确的系统包含路径以允许
#include
语法时出错,或者由于cmake,全局包含被忽略。奥卡姆的剃刀表明我不知道自己在做什么

此解决方案纠正了问题,并完成了Ogre依赖项的编译。然而,食人魔并不编译


  • 将输出写入空白:参数无效
我遇到另一个编译器错误:

C:/OGRE/Dependencies/src/SDL2/include/SDL_opengles2.h:33:31:
    fatal error:
        GLES2/gl2platform.h:
            No such file or directory
C:/OGRE/OgreMain/src/Win32/OgreWinResources.rc:11:0:
    fatal error:
        when writing output to : //not a typo; it's legitimately writing to a null file
            Invalid Argument
终止后不久,编译器会输出另一个相关错误:

C:\TDM-GCC-32\bin\windres.exe: 
    can't open file 'page:':
        Invalid Argument
C:\TDM-GCC-32\bin\windres.exe:
    preprocessing failed.
这个很难调试。事实证明,在谷歌过滤之后,唯一的结果是。一个预感让我想到了这可能是我默认使用Windows UTF-8代码页(65001)对所有命令窗口的结果。

我读得更深入了,就是这样<编译之前在终端中执行的代码>chcp 65001会导致奇怪的错误。有两种解决办法;停止通过注册表项交换代码页,或在任何make命令之前使用
chcp 1252&&
。我创建的cmake_fixer文件可能会被修改以自动化这个过程,但我发现最简单的解决方案是临时删除我使用的注册表修改


当前问题
  • 在编译2、3之前,MinGWSupport无法解析D3D11类型
查看源代码,我怀疑这可能是由于宏和模板的执行顺序造成的冲突<代码>模板似乎表明其意图是在宏替换之前执行它。这与预处理器在编译器处理模板之前替换宏的事实相反


脚注