C++ 编译的程序找不到freeglut.dll

C++ 编译的程序找不到freeglut.dll,c++,visual-studio-2010,opengl,dll,freeglut,C++,Visual Studio 2010,Opengl,Dll,Freeglut,我是这个网站的新手,对编程也比较陌生。 我用Visual Studio 2010做了一些C++编程,我想进入OpenGL,所以我买了OpenGL超级圣经来开始。我被第二章的“简单”项目卡住了。 经过数小时的研究,我已经能够下载使用freeGLUT和GLtools所需的所有文件。我已经确保所有东西都在正确的地方,以便程序正常运行。 现在,似乎一切都解决了。。。除了一个奇怪的问题 有人告诉我需要将freeglut.dll放入Windows\System32,我照做了。这个项目现在就要建立了,但当我去

我是这个网站的新手,对编程也比较陌生。 我用Visual Studio 2010做了一些C++编程,我想进入OpenGL,所以我买了OpenGL超级圣经来开始。我被第二章的“简单”项目卡住了。 经过数小时的研究,我已经能够下载使用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;
    }
这是实际编译的代码,但不会运行(我从不同资源获得的所有冲突数据有点混乱):

#包括
#包括
#包括
#包括
#包括
//调用以绘制场景
void RenderScene(void)
{
//使用当前清除颜色清除窗口
glClear(GLU颜色缓冲位);
glFlush();
}
//设置渲染状态
无效设置RC(无效)
{
glClearColor(0.0f、0.0f、1.0f、1.0f);
}
//真空总管(真空)
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
创建窗口(“简单”);
glutDisplayFunc(渲染场景);
SetupRC();
glutMainLoop();
返回0;
}

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

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

我的解决方案:

  • 将以下子目录结构添加到解决方案文件夹:
  • x86
    中,放置32位版本的GLut、GLew和您需要的任何其他内容

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

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

    包含目录
    字段设置为

    $(SolutionDir)第三方\包括\$(包括路径)

    以及您的
    库目录
    字段

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

    请注意,所有这些都应应用于“所有平台”构建配置。
    $(PlatformTarget)
    宏将确保使用正确的库和dll。
    include
    文件夹是目标不可知的,所以我把它放在我的
    ThirdParty
    文件夹的根目录中

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

    xcopy$(SolutionDir)第三方\$(平台目标)\*.dll$(输出路径)/Y

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


    一旦我完成了所有这些配置,我就创建了一个VC OpenGL项目模板,因为配置所有东西花费了我30分钟的时间,我宁愿回去。

    你是否尝试过将dll与exe放在同一个文件夹中,看看它是否能工作?你没有得到足够的认可来回答这个问题。谢谢你。谢谢你的解决方案。花了大约1个小时寻找解决方案,然后我发现这个在VS2017中非常有效。@像您这样的用户1684343响应使它值得一试。很高兴我能帮忙。
     #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;
    }