【问题标题】:compiled program cannot find freeglut.dll编译后的程序找不到 freeglut.dll
【发布时间】:2013-05-29 21:52:43
【问题描述】:

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

【问题讨论】:

  • 您是否尝试通过将 dll 与 exe 放在同一文件夹中来查看它是否可以正常工作?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    @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 分钟的时间,我宁愿回来。

    【讨论】:

    • 你没有得到足够的认可来回答这个问题。向你致敬。
    • 感谢您的解决方案。花了大约 1 小时寻找解决方案,然后我发现了这个,在 VS2017 中完美运行。
    • @user1684343 像您这样的回复值得。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多