编译 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 <Windows.h>
(其中隐含包含 WinDef.h)肯定会。
【参考方案1】:
我怀疑您的代码 sn-p 是实际编译的。错误消息提到 GLU 定义。这些在 GL/glu.h
包含中找到,在您的 sn-p 中没有提到,也没有包含在 glew.h
和 SDL.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 程序时出错的主要内容,如果未能解决你的问题,请参考以下文章