2010-12-11 162 views
3

它不运行,显然。代码直接从提供的源代码复制。我把图书馆和标题放在我被告知的地方。运行它会导致某种崩溃。OpenGL Superbible第一次程序崩溃

我问了几个人来运行它,他们都说它给了他们一个关于丢失.dll的错误,并没有试图运行该程序,与我发生的事情完全不同。

从 “x.exe已停止工作” 的对话:

Problem signature: 
    Problem Event Name: BEX 
    Application Name: OpenGLtutorialCh2.exe 
    Application Version: 0.0.0.0 
    Application Timestamp: 4d02d634 
    Fault Module Name: StackHash_0a9e 
    Fault Module Version: 0.0.0.0 
    Fault Module Timestamp: 00000000 
    Exception Offset: 00000000 
    Exception Code: c0000005 
    Exception Data: 00000008 
    OS Version: 6.1.7600.2.0.0.256.48 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

体形:

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; 
} 

我问了几个人们去运行它们,他们都说它给了他们一个关于丢失.dll的错误,并没有尝试运行该程序,与发生在我身上的事情完全不同。

+0

它导致“一种崩溃”?但是你不觉得有必要给我们提供关于坠机的任何信息吗? ;) – jalf 2010-12-11 05:57:27

+0

我不明白为什么你可以给我们提供有关异常堆栈跟踪和其他有用信息的信息。你为什么不开始调试? – Luca 2010-12-12 00:19:17

+0

@luca因为我对这个东西一无所知。此外,这些代码直接从本书提供的源代码中复制,我希望这些代码能够工作。 – Bacu 2010-12-12 03:58:00

回答

0

我把这个粉笔写到坏的司机。

4

实际上,信息您所提供显示应用程序已在实际上编译:

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 

消息的其余部分只是警告。

+0

当我运行它时,控制台出现,然后窗口。窗户全是白色的,从不回应。 – Bacu 2010-12-11 02:21:04

+0

@Bacu您正在使用哪种操作系统? – karlphillip 2010-12-11 02:22:49

+0

Windows 7 32bit – Bacu 2010-12-11 02:24:45

0

与您的代码真的很困惑 - 过剩和WGL在一个项目...尝试使用刚刚过剩如这些例子http://www.lighthouse3d.com/opengl/glut/ 在我的Ubuntu的笔记本电脑和台式机Win7x64完美工作。

+0

我只是做本书告诉我的。我不知道任何这样的杰克。 – Bacu 2010-12-11 06:30:13

1

LNK4098警告必须与你的运行时设置的事 - 在大多数情况下,我相信你可以通过进入项目属性和更改配置属性> C/C++>代码生成>运行时库撤销他们多线程调试DLL多线程调试。 (对于调试配置。该推出设置将从多线程的DLL改变多线程。)

LNK4099警告出现因为.pdb文件不存在时,作为警告说。您可以通过从源代码重新编译库来生成.pdb文件 - 确保为每个配置(Debug或Release)编译正确的版本并从Release版本中排除Debug版本,反之亦然。

所有这些说,这些警告是不致命的。我不想让警告堵塞我的错误列表,但是项目在出现时仍然应该编译。