【发布时间】:2010-09-06 01:39:14
【问题描述】:
在Visual C++ Express Edition下使用GLUT(OpenGL Utility Toolkit)编译OpenGL应用程序的基本步骤是什么?
【问题讨论】:
标签: visual-studio visual-c++ opengl glut
在Visual C++ Express Edition下使用GLUT(OpenGL Utility Toolkit)编译OpenGL应用程序的基本步骤是什么?
【问题讨论】:
标签: visual-studio visual-c++ opengl glut
您使用 GLUT 或 OpenGL 的程序现在应该在 Visual C++ Express Edition 下编译。
【讨论】:
Nate Robin 网站上的 GLUT 端口来自 2001 年,与比该版本更新的 Visual Studio 版本(.NET 2003 及更高版本)存在一些不兼容。不兼容表现为关于重新定义exit() 的错误。如果您看到此错误,有两种可能的解决方案:
glut.h 中的exit() 原型替换为stdlib.h 中的原型,以便它们匹配。这可能是最好的解决方案。#define GLUT_DISABLE_ATEXIT_HACK 之前 #include <gl/glut.h>。(归功于:我最初在 TAMU help desk website 上看到了这个建议。)
自从 .NET 2003 出现以来,我自己一直在使用方法 #1,并且在 VC++ 2003、VC++ 2005 和 VC++ 2008 中使用了相同的修改 glut.h。
这是我使用的 glut.h 的差异,它执行 #1(但在适当的 #ifdef blocks 中,因此它仍然适用于旧版本的 Visual Studio):
--- c:\naterobbins\glut.h 2000-12-13 00:22:52.000000000 +0900
+++ c:\updated\glut.h 2006-05-23 11:06:10.000000000 +0900
@@ -143,7 +143,12 @@
#if defined(_WIN32)
# ifndef GLUT_BUILDING_LIB
-extern _CRTIMP void __cdecl exit(int);
+/* extern _CRTIMP void __cdecl exit(int); /* Changed for .NET */
+# if _MSC_VER >= 1200
+extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);
+# else
+extern _CRTIMP void __cdecl exit(int);
+# endif
# endif
#else
/* non-Win32 case. */
【讨论】: