好的,所以我最近有了OpenGL SuperBible,并在 Code::: Block上将目录设置为到freeglut
和GLTools.h
,但是这些#include
语句不起作用:
#include <GLtools.h>
#include <GLShaderManager.h>
#include <iostream>
#include <GL/glut.h>
要设置目录,我通过“设置”->“编译器和调试器...”->“搜索目录”选项卡,并将其添加到“编译器”选项卡下(还有“链接器”和“资源编译器”选项卡):
C:\CodeBlocks\SB5\Src\GLTools\include
和
C:\CodeBlocks\SB5\freeglut-2.6.0\include
这些是我得到的错误:
C:\CodeBlocks\SB5\freeglut-2.6.0\include\GL\freeglut_std.h|60|warning: "NOMINMAX" redefined|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\mingw32\bits\os_defines.h|46|warning: this is the location of the previous definition|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|225|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|226|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|227|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|228|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|229|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|230|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|231|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|232|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|233|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|234|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|235|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|236|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|237|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|238|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|239|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|240|error: expected constructor, destructor, or type conversion before 'const'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|241|error: expected constructor, destructor, or type conversion before 'const'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|242|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|243|error: expected constructor, destructor, or type conversion before 'const'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|244|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|245|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|246|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|247|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|248|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|249|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|250|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|251|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|252|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|253|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|254|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|255|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|256|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|257|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|258|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|259|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|260|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|261|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|262|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|263|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|264|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|265|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|266|error: 'GLAPI' does not name a type|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|267|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|268|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|269|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|270|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|271|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|272|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|273|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|274|error: expected constructor, destructor, or type conversion before 'void'|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 2 warnings ===|
头文件之间似乎发生了某种冲突,尽管当我什至不包含
glu.h
时,头文件中都出现了错误。请帮忙!和谢谢! =)
最佳答案
当您尝试在SuperBible(第5版)中编译Triangle示例时,我遇到了与您同样的问题。我还喜欢在MinGW中使用Code::Blocks。我一直在做一些研究,我认为我已经设法解决了大多数问题。
首先要做的是正确设置我们的环境。我们从配置库freeglut和GLTools开始。
在开始之前,请确保已安装最新版本的MinGW和MSYS。检查是否已将c:/MinGW/bin添加到路径变量。还可以使用7z这样的优质文件提取器,它可以解压缩.tar和.gz文件。
我可能会太详细了,但是直到我研究了这些东西,这些东西对我来说都是不明显的。
要设置freeglut-2.6.0,我们要做的第一件事是从源代码编译静态库:
转到this site以获得有关使用MinGW编译freeglut的更多引用。
在使GLTools工作之前,请确保freeglut可以工作。
int main (){return 0;}
。 #define FREEGLUT_STATIC
和#include <GL/glut.h>
。 好的,既然我们已经有了freeglut,现在该再次打破它了。我们首先将重新创建GLTools库,因为SB5仅分发.lib版本。
#include <GLTools.h>
并尝试构建该项目。您应该遇到许多“'GLAPI'未命名类型”错误。之所以发生这种情况,是因为在某些时候(不确定自己在哪里)GLAPI尚未定义。或定义错误。 如果您从未使用过这种库(我还没有,所以对我来说也是一种学习经验),那么这值得调查。当我们包含“glut.h”时,如果打开头文件,您将看到它只是包含“freeglut_std.h”。因此,您打开该文件,它具有许多预处理程序命令。
在文档中搜索GLAPI,我们发现这里没有定义GLAPI。但是,它确实包括
<GL/gl.h>
和<GL/glu.h>
。因此,打开gl.h并在那里进行搜索。答对了!我们可以看到一些与GLAPI定义相关的命令。这有点令人困惑,但是我们将复制预处理器通常执行的操作。所以我们有这些行:
/* GLAPI, part 1 (use WINGDIAPI, if defined) */
#if defined(__WIN32__) && defined(WINGDIAPI)
# define GLAPI WINGDIAPI
#endif
/* GLAPI, part 2 */
#if !defined(GLAPI)
# if defined(_MSC_VER) /* Microsoft Visual C++ */
# define GLAPI __declspec(dllimport)
# elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */
# define GLAPI __stdcall
# else /* Others (e.g. MinGW, Cygwin, non-win32) */
# define GLAPI extern
# endif
#endif
我们可以搜索freeglut_std.h并找出未定义的WINGDIAPI。因此,我们跳过第一个块。从第二个块中,我们可以看到所需的行是
#define GLAPI extern
。那么,似乎正在发生的事情是GLTools中的头文件之一正在为我们弄乱这个定义。没什么可做的,只是尝试找出问题所在。
GLTools没有说任何关于GLAPI的信息,但是在
<windows.h>
之前包括<GL/glew.h>
和<GL/gl.h>
。 glew.h定义了GLAPI几次,但是因为代码中没有标识,所以分辨输入或不输入代码有点令人困惑。但是,很明显,出于我们的目的,必须将GLAPI定义为extern。因此,我们将对test.cpp进行快速修改,并将GLAPI定义为extern,该命令位于include之前。#include <GLTools.h>
#define FREEGLUT_STATIC
#define GLAPI extern
#include <GL/glut.h>
它仍然会被破坏,但是我们应该得到一个退出的新错误!因此,我们编译并...
嗯它编译没有错误。那不应该发生的。但是,然后,我们没有调用GLTools中的任何函数,因此也许并不奇怪。我们会碰运气,然后在triangle.ccp,
#include <GLShaderManager.h>
中添加第二个include。并编译,再次没有错误。好的,所以我们几乎可以构建示例了。现在,我们开始用triangle.cpp的内容填充test.cpp,并在失败时进行测试。我先添加
GLBatch triangleBatch;
GLShaderManager shaderManager;
在main之外,还有几个 undefined reference 。这还差不多。因此,我们打开Build选项(记住要指定整个项目,而不是发行或调试目标),并将GLTools添加到Link库。我们这样做了,现在(正如您应该一直注意的那样,您应该期待),我们得到了一堆对glew函数的 undefined reference 。
e!如此令人兴奋。因此,现在我们将glew库添加到Build选项。如果您最后链接有问题,我们会学到一些新知识。您必须记住,在链接库时,必须先链接具有自己的依赖关系的库。如果我们提前知道它们都依赖什么,这将很有帮助,因此将来可以绘制 map 或其他内容。
因此,我们要链接freeglut,这取决于winmm,gdi32和opengl32。我们还希望依赖于glew的GLTools和依赖opengl32的glew。然后,将它们链接的顺序应该是... freeglut,GLTools,glew,winmm,gdi32和opengl32。让我们看看是否可行...。
哈!它编译没有错误。该死的我很好(不是真的:()。
好的,既然我们已经设置了环境,我就将Triangle.cpp文件的其余部分复制过来,保存,构建,并且没有错误。
我已经在两台计算机上测试了这些步骤,并且它们起作用了。我认为以上步骤应该使使用Code::Blocks和MinGW的任何人都可以在OpenGL SuperBible,第5版中构建教程。
关于c++ - OpenGL SuperBible 5版设置问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5608520/