2012-12-31 2 views
1

믿을 수 없을만큼 기본적인 GLUT OpenGL 프로그램의 OpenGL Reference Guide에서 첫 번째 프로그램을 복사했습니다.기본 OpenGL 프로그램이 작동하지 않지만 gdb에서 작동합니다

저는 Code :: Blocks IDE를 사용하고 있으며 우분투 12.10에서 실행 중입니다.

fglrx 드라이버와 함께 ATI Mobile Radeon 4670을 사용하고 있습니다.

이 코드를 사용하여 제 환경이 올바르게 작동하는지 확인하고 있습니다.

#include <GL/glut.h> 
#include <stdlib.h> 

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBegin(GL_POLYGON); 
     glVertex3f(0.25,0.25,0.0); 
     glVertex3f(0.75,0.25,0.0); 
     glVertex3f(0.75,0.75,0.0); 
     glVertex3f(0.25,0.75,0.0); 
    glEnd(); 

    glFlush(); 
} 

void init(void) 
{ 
    glClearColor(0.0,0.0,0.0,0.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(250,250); 
    glutInitWindowPosition(100,100); 
    glutCreateWindow("hello"); 
    init(); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 

나는 이것이 내가 실행할 수 있습니다 희망 컴파일 할 간단한 코드라고 생각 했어요 : 다음은 코드입니다. include/lib/ 디렉토리 (/usr/include/usr/lib/x86_64-linux-gnu)로 일부 fenangling 후, 나는 오류없이 컴파일 할 수있었습니다.

Code :: Blocks 내에서 또는 터미널을 사용하여 실행하면 세그먼트 오류가 발생합니다. 창의 그림자가 나타나지만 파괴되고 프로그램이 종료됩니다.

정말 이상한 부분은 디버깅하려고 할 때입니다. Code :: Blocks에서 "Debug"를 선택하거나 명령 행에서 gdb를 직접 실행 (gdb <program>을 실행하고 run을 실행)하면 정상적으로 실행됩니다. 오류 또는 문제가 발생하지 않으며 예상대로 실행됩니다.

이렇게하면 문제가 무엇인지 파악하기가 매우 어렵습니다. 나는 GDB는 보통 실행에서 생성 된 코어 파일을 확인했지만, 모두가

Program terminated with signal 11, Segmentation fault. 
#0 0x00007f9ee3a5815c in ??() 

리얼 큰 도움이했다. 어떤 아이디어? 구성에 문제가있을 수 있으므로 멀리 물어보십시오. 나는 과잉 사용한 적이 있기 때문에 나는 확실하지 않다

+1

오픈 소스 드라이버를 사용하면 Linux에서 OpenGL을 디버그하기가 더 쉽습니다. 이것은 오픈 소스의 정치 또는 소스 코드에 대한 액세스와는 아무런 관련이 없습니다. 오픈 소스 드라이버는 Valgrind-clean보다 안정적입니다. –

+0

또한 프로그램이 잘 보이고 나를 위해 작동합니다. 그래서 다른 드라이버를 설치해야하는 또 다른 이유입니다. glxgears가 시스템에서 작동합니까? ('apt-get install mesa-utils') –

답변

1

하지만 this 사이트는이

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE)처럼 glutInitDisplayMode를 호출 제안하는 것;

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB)과 같이 호출하는 동안;

둘을 비교하면 두 매개 변수를 전환해야하는지 궁금합니다.

편집 :
저를 귀찮게하지 마십시오. 그것들은 2 가지 매개 변수가 아닙니다> < 그들은 단순히 OR 연산을합니다. 여기 오전 9시에 잠을 자지 않아 내 어리 석음을 용서합니다. <

+0

"OpenGL 설치"에 대한 삭제 된 답변에 대한 귀하의 의견에 대하여, 예, OpenGL 구현을 설치하거나 제거 할 수 있습니다. LibPNG 또는 GTK와 같은 사용자 공간 라이브러리 일 뿐이므로 시스템에 추가하거나 삭제할 수 있습니다. 내 시스템에서 선택할 수있는 세 가지 구현이 있습니다. ATI에서 나온 버그, Mesa의 기능 불완전한 것, 소프트웨어 구현입니다.예, OpenGL 라이브러리는 드라이버와 별개입니다. –

+0

물론 파일을 제거하거나 파일을 다운로드하여 컴파일러의 lib 폴더에 복사 할 수도 있습니다. 그러나 IMO는 설치와 같지 않습니다. 설치가 단순히 실행 파일을 실행하는 것을 더 이상 포함하지 않기 때문입니다. 그리고 예, 저는 설치 프로그램이 기본적으로 압축을 풀고 일부 파일을 일부 폴더에 복사한다는 것을 알고 있습니다. 그 점에 관해서는 당신은 완전히 맞습니다. :) – Kevin

+0

"설치 중"이란 프로그램 또는 라이브러리를 사용할 준비를하는 것을 의미합니다. "설치 프로그램"은 프로그램이나 라이브러리를 설치하는 프로그램의 일종이지만 설치하는 유일한 방법은 아닙니다. 파일을 복사하여 라이브러리 또는 프로그램을 수동으로 설치할 수 있습니다. Linux 사용자 및 OS X의 대부분의 프로그램은 수동으로 파일을 복사하거나 makefile 대상을 실행하거나 패키지 관리자를 사용하여 설치 프로그램을 실행하지 않고 설치되기 때문에 Windows 사용자라고 추측합니다. –

관련 문제