2010-12-11 2 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; 
} 
내가 몇 가지 질문 사람들이 그것을 실행, 그들은 모두 그들에게 준 것이라고 말했다. 누락 된 .dlls에 관한 오류와 나에게 일어나는 것과는 완전히 다른 프로그램 실행을 시도하지 않았습니다. 메시지의 나머지 단지 경고했다

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

:

+0

"일종의 충돌"이 발생합니까? 하지만 충돌에 대한 정보를 우리에게 제공해야한다고 생각하지 않았습니까? ;) – jalf

+0

왜 예외 스택 추적 및 기타 유용한 정보에 대한 정보를 줄 수 있는지 이해할 수 없습니다. 왜 디버깅을 시작하지 않습니까? – Luca

+0

@luca 왜냐하면 나는이 물건에 대해 아무것도 모른다. 또한이 코드는 책에서 제공되는 소스에서 직접 복사됩니다. – Bacu

답변

0

나는 나쁜 드라이버까지 이것을 분쇄한다.

4

사실, 정보는 당신이 응용 프로그램이 실제로 컴파일 된 것을 쇼를 제공했다.

+0

실행하면 콘솔이 나타나고 창이 닫힙니다.창문은 모두 흰색이고 응답하지 않습니다. – Bacu

+0

@Bacu 어떤 OS를 사용하고 있습니까? – karlphillip

+0

Windows 7 32bit – Bacu

0

하나의 프로젝트에서 GLUT 및 WGL과 혼동을 느낍니다.이 예제 에서처럼 glut을 사용하십시오. http://www.lighthouse3d.com/opengl/glut/ 내 우분투 랩톱 및 Win7x64 데스크톱에서 완벽하게 작동했습니다.

+0

나는 책에서 내게 말하는 것을 그냥한다. 나는 이것에 관해서 잭을 모른다. – Bacu

1

LNK4098 경고는 런타임 설정을 할 필요가 - 대부분의 경우에 당신이 구성 속성> C/C++> 코드 생성> 런타임 라이브러리에서 을 프로젝트 속성에 가서 변경을 파기 수 있다고 생각 다중 스레드 디버그 DLL ~ 다중 스레드 디버그. (디버그에 대한 구성. 릴리스 설정은을 멀티 스레드다중 스레드 DLL로 변경한다.)를 .PDB 파일이 존재하지 않기 때문에 경고가 말한대로

LNK4099 경고가 발생한다. 소스에서 라이브러리를 다시 컴파일하여 .pdb 파일을 생성 할 수 있습니다. 각 구성 (디버그 또는 릴리스)에 적합한 버전을 컴파일하고 릴리스 빌드에서 디버그 버전을 제외하고 그 반대로도 컴파일해야합니다.

이 모든 경고는 치명적이지 않습니다. 나는 경고가 내 오류 목록을 막히게하는 것을 선호하지 않지만 프로젝트는 존재할 때 컴파일해야합니다.

관련 문제