【问题标题】:Using GLUT with Visual C++ Express Edition将 GLUT 与 Visual C++ 速成版一起使用
【发布时间】:2010-09-06 01:39:14
【问题描述】:

在Visual C++ Express Edition下使用GLUT(OpenGL Utility Toolkit)编译OpenGL应用程序的基本步骤是什么?

【问题讨论】:

    标签: visual-studio visual-c++ opengl glut


    【解决方案1】:
    1. 如果您没有 Visual C++ Express Edition (VCEE),请下载并安装 VCEE
    2. Visual C++ Express Edition 的默认安装是为 .Net 平台构建的。我们需要为 Windows 平台构建,因为 .Net 尚未完全支持 OpenGL 和 GLUT。为此,我们需要 Microsoft 平台 SDK。 (如果您使用的是旧版本的 VCEE,请下载并安装 Microsoft Platform SDK。Visual C++ Express Edition 需要配置为针对 Windows 平台构建。所有这些说明都可以在 here 获得。)
    3. 如果您没有 GLUT,请下载并解压缩 Nate Robin 的 Windows port of GLUT
    4. glut.h 添加到您的 Platform SDK/include/GL/ 目录
    5. 将项目与 glut.lib 链接。 (转到 VCEE Project Properties -> Additional Linker Directories 并添加具有 glut.lib 的目录。
    6. glut.dll添加到Windows/System32目录,让所有使用GLUT的程序 可以在运行时找到。

    您使用 GLUT 或 OpenGL 的程序现在应该在 Visual C++ Express Edition 下编译。

    【讨论】:

    • 非常感谢!对于我们这些不太了解第 4 步的人,这对我来说翻译成以下目录(例如): C:\Program Files\Microsoft SDKs\Windows\7.0a\Include\GL .Step 5's 'Lib'目录与“包含”处于同一级别(在这种情况下,您不需要声明和附加链接器目录)。
    【解决方案2】:

    Nate Robin 网站上的 GLUT 端口来自 2001 年,与比该版本更新的 Visual Studio 版本(.NET 2003 及更高版本)存在一些不兼容。不兼容表现为关于重新定义exit() 的错误。如果您看到此错误,有两种可能的解决方案:

    1. glut.h 中的exit() 原型替换为stdlib.h 中的原型,以便它们匹配。这可能是最好的解决方案。
    2. 更简单的解决方案是在您的程序中 #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. */
    

    【讨论】:

    • Baxissimo:感谢您指出这个常见错误及其修复。我已经看到几乎每个 OpenGL 新手都面临这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2011-06-01
    • 2010-12-22
    相关资源
    最近更新 更多