编译 GLEW/SDL 程序时出错

Posted

技术标签:

【中文标题】编译 GLEW/SDL 程序时出错【英文标题】:Getting errors when compiling GLEW/SDL program 【发布时间】:2013-12-07 12:52:09 【问题描述】:

我有这个代码:

#include <iostream>

#include <glew.h>
#include <SDL.h>

#pragma comment(lib, "glew32.lib")
#pragma comment(lib, "SDL2.lib")

using namespace std;

int main()

    return 0;

我收到这些错误:

/usr/include/w32api/GL/glu.h:68:79: error: expected ‘)’ before ‘*’ token
 void APIENTRY gluQuadricCallback(GLUquadric *qobj,GLenum which,void (CALLBACK *fn)());
                                                                               ^
/usr/include/w32api/GL/glu.h:68:79: error: expected ‘)’ before ‘*’ token
/usr/include/w32api/GL/glu.h:68:79: error: expected initializer before ‘*’ token
/usr/include/w32api/GL/glu.h:78:79: error: expected ‘)’ before ‘*’ token
 void APIENTRY gluTessCallback(GLUtesselator *tess,GLenum which,void (CALLBACK *fn)());
...

出了什么问题? 似乎 glu.h 属于 MinGW 包。我将 NetBeans 与 Cygwin 一起使用。

【问题讨论】:

我很确定 MinGW 附带的 gcc 版本不理解您的 #pragma comment(lib, ...) 指令。这些是告诉链接器使用这些库的非标准 Microsoft Visual C 指令。您将需要将-lglew32-lSDL2 之类的内容添加到链接器命令行以使其可移植。此外,CALLBACK 可能没有定义...... GLU 应该处理这个,但如果它没有 #include &lt;Windows.h&gt;(其中隐含包含 WinDef.h)肯定会。 【参考方案1】:

我怀疑您的代码 sn-p 是实际编译的。错误消息提到 GLU 定义。这些在 GL/glu.h 包含中找到,在您的 sn-p 中没有提到,也没有包含在 glew.hSDL.h 中。

无论如何,该错误很可能是由于缺少特定于 Windows 的 APIENTRY 宏的定义(仅在 Windows 操作系统的构建中才会出现)。要么包含windows.h,要么自己定义宏。

我建议在添加任何与 OpenGL 相关的内容之前使用它。

#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) \
 || defined(__TOS_WIN__) || defined(__WINDOWS__)
/* Compiling for Windows */
#ifndef __WINDOWS__
#define __WINDOWS__
#endif
#  include <windows.h>
#endif/* Predefined Windows macros */

【讨论】:

以上是关于编译 GLEW/SDL 程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 深度测试不工作 (GLEW/SDL2)

在 CLion 中编译简单程序时出错

升级引导程序后编译资产时出错

编译c++程序的内存分配代码时出错

VS2012编译的MFC程序XP运行出错R6010

使用 Address Sanitizer 编译程序时出错