C++ OpenGL Superbible第一个程序崩溃
显然,它没有运行。代码直接从提供的源代码复制。我把库和标题放在我被告知的地方。运行它会导致某种崩溃 我让几个人运行它,他们都说它给了他们一个关于丢失.dll的错误,并且没有尝试运行这个程序,这与我的情况完全不同 从“x.exe已停止工作”对话框: 建造:C++ OpenGL Superbible第一个程序崩溃,c++,c,opengl,glut,C++,C,Opengl,Glut,显然,它没有运行。代码直接从提供的源代码复制。我把库和标题放在我被告知的地方。运行它会导致某种崩溃 我让几个人运行它,他们都说它给了他们一个关于丢失.dll的错误,并且没有尝试运行这个程序,这与我的情况完全不同 从“x.exe已停止工作”对话框: 建造: 1>------ Rebuild All started: Project: OpenGLtutorialCh2, Configuration: Debug Win32 ------ 1> triangle.cpp 1&g
1>------ Rebuild All started: Project: OpenGLtutorialCh2, Configuration: Debug Win32 ------
1> triangle.cpp
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>gltools.lib(GLBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(glew.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(glew.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLShaderManager.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLShaderManager.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLTools.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTools.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLTriangleBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTriangleBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>gltools.lib(GLBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(glew.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(glew.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLShaderManager.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLShaderManager.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLTools.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTools.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1>gltools.lib(GLTriangleBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTriangleBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info
1> OpenGLtutorialCh2.vcxproj -> C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\OpenGLtutorialCh2.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
有关守则:
#include <GLTools.h>
#include <GLShaderManager.h>
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0,0,w,h);
}
///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
shaderManager.InitializeStockShaders();
GLfloat vVerts[]= {
-0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 1.0f};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800,600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW ERROR: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
#包括
#包括
#苹果__
#包括
#否则
#定义FREEGLUT\u静态
#包括
#恩迪夫
GLBatch三角板;
GLShaderManager shaderManager;
///////////////////////////////////////////////////////////////////////////////
//窗口大小已更改,或刚刚创建。无论哪种情况,我们都需要
//使用窗口尺寸设置视口和投影矩阵。
无效更改大小(整数w、整数h)
{
glViewport(0,0,w,h);
}
///////////////////////////////////////////////////////////////////////////////
//此函数对渲染上下文执行任何必要的初始化。
//这是第一次有机会执行任何与OpenGL相关的任务。
void SetupRC()
{
glClearColor(0.0f、0.0f、1.0f、1.0f);
shaderManager.InitializeStockShaders();
GLfloat vVerts[]={
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f};
三角面片。开始(三角面片,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
///////////////////////////////////////////////////////////////////////////////
//调用以绘制场景
void RenderScene(void)
{
//使用当前清除颜色清除窗口
glClear(GL|U颜色|U缓冲|位| GL|U深度|U缓冲|位| GL|U模具|U缓冲|位);
GLfloat vRed[]={1.0f,0.0f,0.0f,1.0f};
UseStockShader(GLT_SHADER_IDENTITY,vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
///////////////////////////////////////////////////////////////////////////////
//基于GLUT的程序的主要入口点
int main(int argc,char*argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_双精度| GLUT_RGBA | GLUT_深度| GLUT_模具);
glutInitWindowSize(800600);
三角窗;
GLUTEFUNC(更改大小);
glutDisplayFunc(渲染场景);
GLenum err=glewInit();
如果(GLEW_OK!=错误){
fprintf(stderr,“GLEW错误:%s\n”,glewGetErrorString(err));
返回1;
}
SetupRC();
glutMainLoop();
返回0;
}
我请几个人运行它,他们都说它给了他们一个关于缺少.dll的错误,并且没有尝试运行该程序,这与我的情况完全不同。事实上,您提供的信息表明该应用程序实际上是编译的:
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
其余的消息只是警告。在一个项目中与代码GLUT和WGL混淆了。。。尝试使用这些示例中所示的glut
在我的Ubuntu笔记本电脑和Win7x64台式机上工作得非常好。我认为这是坏的驱动程序。LNK4098警告与您的运行时设置有关-在大多数情况下,我相信您可以通过进入项目属性并更改配置属性>C/C++>代码生成>运行时来取消它们库从多线程调试DLL到多线程调试。(用于调试配置。发布设置将从多线程DLL更改为多线程) 出现LNK4099警告是因为.pdb文件不存在,正如警告所说。您可以通过从源代码重新编译库来生成.pdb文件-确保为每个配置(调试或发布)编译正确的版本,并从发布版本中排除调试版本,反之亦然
尽管如此,这些警告并不是致命的。我不希望警告堵塞我的错误列表,但当它们出现时,项目仍应编译。当我运行它时,控制台出现,然后窗口出现。窗口全是白色,从不响应。@Bacu您使用的是哪个操作系统?如果可以,请在其他Windows版本上尝试。这会导致“某种崩溃”?但是你觉得没有必要告诉我们关于坠机的任何信息吗?;)我不明白你为什么能给我们提供关于异常堆栈跟踪和其他有用信息的信息。你为什么不开始调试?@luca,因为我对这些东西一无所知。此外,这段代码是直接从书中提供的源代码中复制出来的,我希望这段代码能够正常工作。这些我都不认识杰克。
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========