C++ 编译的程序找不到freeglut.dll
我是这个网站的新手,对编程也比较陌生。 我用Visual Studio 2010做了一些C++编程,我想进入OpenGL,所以我买了OpenGL超级圣经来开始。我被第二章的“简单”项目卡住了。 经过数小时的研究,我已经能够下载使用freeGLUT和GLtools所需的所有文件。我已经确保所有东西都在正确的地方,以便程序正常运行。 现在,似乎一切都解决了。。。除了一个奇怪的问题 有人告诉我需要将freeglut.dll放入Windows\System32,我照做了。这个项目现在就要建立了,但当我去运行它时,它告诉我 “由于您的计算机缺少freeglut.dll,程序无法启动。请重试 重新安装程序以解决此问题。“ 现在,我确定freeglut.dll在Windows\System32中应该是这样的,那么问题出在哪里?我如何解决它 这是书中的原始代码: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,我照做了。这个项目现在就要建立了,但当我去
#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;
}