7

我是这个网站的新手,对编程也比较陌生。我一直在使用 Visual Studio 2010 进行一些 C++ 编程,我想进入 OpenGL,所以我购买了 OpenGL Superbible 开始使用。我被困在第二章的“简单”项目上。经过数小时的研究,我已经能够下载所有必要的文件来使用 freeGLUT 和 GLtools。我已经确保一切都在正确的地方让程序正常工作。现在,似乎一切都已经解决了……除了一个奇怪的问题。

有人指示我需要将 freeglut.dll 放入 Windows\System32,所以我这样做了。该项目现在将构建,但是当我运行它时,它告诉我

“程序无法启动,因为您的计算机中缺少 freeglut.dll。请尝试重新安装程序以解决此问题。”

现在,我确定 freeglut.dll 应该在 Windows\System32 中,那么问题出在哪里?我该如何解决?

这是书中的原始代码:

#include "../../shared/gltools.h"  //OpenGL toolkit

//////////////////////////////////////////////
//called to draw scene

void RenderScene(void)
{
    // clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

 //Flush drawing commands
    glFlush();
}
////////////////////////////////////////////////////////
//set up the rendering state
void SetupRC(void)
{
    glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
}
///////////////////////////////////////////////////////////
//main program entry point
void main(void)
int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();
    glutMainLoop();
    return 0;
    }

这是实际编译的代码,但不会运行(我从不同资源获得的所有冲突数据有点混乱):

 #include <stdio.h>
 #include <stdlib.h>
 #include <windows.h>
 #include <GLTools.h>
 #include <gl/GLUT.h>
 //called to draw scene

 void RenderScene(void)
 {
// clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT);

glFlush();
 }

 //set up the rendering state
 void SetupRC(void)
 {
glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
 }

 //void main(void)
 int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Simple");
glutDisplayFunc(RenderScene);

SetupRC();
glutMainLoop();
return 0;
}
4

2 回答 2

12

尝试将 DLL 与您的 exe 文件放在同一文件夹中。将它放在 Windows\System32 中的建议早于许多较新的 Windows 安全限制。

于 2013-05-29T21:56:57.067 回答
11

@ScottMcP-MVP 的回答解决了我的问题,但我想我会添加一些不适合评论的细节。

我的解决方案:

  1. 将以下子目录结构添加到您的解决方案文件夹:

在此处输入图像描述

x86中,放入 32 位版本的 GLut、GLew 和您需要的任何其他内容。

x64中,放入相同的 64 位版本。

我继续将所有.dll, .lib, 和.h放在此处的相应文件夹中,而不是将它们放在 Windows SDK(或者,在 Win7+ 中,“Windows Kits”文件夹)中,以确保我在 SVN 中的项目具有正确的版本,并签出在另一台机器上将检索所有依赖项。这需要将include特定于目标的lib文件夹添加到项目属性中:

在此处输入图像描述

将您的Include Directories字段设置为

$(SolutionDir)ThirdParty\Include\;$(IncludePath)

和你的Library Directories领域

$(SolutionDir)\ThirdParty\$(PlatformTarget)\lib\;$(LibraryPath)

请注意,所有这些都应应用于“所有平台”构建配置。该$(PlatformTarget)宏将确保使用正确的 lib 和 dll。该include文件夹与目标无关,因此我将其放在ThirdParty文件夹的根目录中。

要将所需的文件放入您的输出文件夹,请将以下构建后事件添加到您的项目配置中(在“所有平台”下):

xcopy $(SolutionDir)ThirdParty\$(PlatformTarget)\*.dll $(OutputPath) /Y

在此处输入图像描述

这会将正确版本的 DLL 复制到构建时的输出文件夹中。这使您不必手动将 DLL 放在我们的输出文件夹中,并且与源代码控制更兼容,您通常不希望包含输出、bin 或调试文件夹。

完成所有这些配置后,我创建了一个 VC OpenGL 项目模板,因为配置所有内容花了我生命中的 30 分钟,我宁愿回来。

于 2013-09-28T20:55:36.680 回答