编译程序找不到freeglut.dll

时间:2013-05-29 21:52:44

标签: c++ visual-studio-2010 opengl dll freeglut

我是这个网站的新手,对编程比较新。 我使用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;
}

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:10)

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

我的解决方案:

  1. 将以下子目录结构添加到解决方案文件夹中:
  2. enter image description here

    x86中,放置32位版本的GLut,GLew以及您需要的任何其他内容。

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

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

    enter image description here

    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

    enter image description here

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

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