我是这个网站的新手,对编程比较新。 我使用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;
}
答案 0 :(得分:10)
尝试将DLL放在与exe文件相同的文件夹中。将它放在Windows \ System32中的建议早于许多较新的Windows安全限制。
答案 1 :(得分:10)
@ ScottMcP-MVP的答案解决了我的问题,但我想我会添加一些不太符合评论的细节。
我的解决方案:
在x86
中,放置32位版本的GLut,GLew以及您需要的任何其他内容。
在x64
中,放置相同的64位版本。
我继续将所有.dll
,.lib
和.h
放在相应的文件夹中,而不是放在Windows SDK中(或者,在Win7 +中,“Windows套件”) “文件夹”以确保我在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分钟的生命我宁愿回来。