2014-01-24 1 views
2

나는이 작은 example를 컴파일하려고 나는 메이크업 실행이 오류가 연결 :연산 쉐이더

g++ -o ogl_cs_example main.cpp opengl_cs.cpp opengl_util.cpp -Wall -Iinclude -lX11 -lGL -lGLU 
/tmp/ccFLIOt2.o: In function `updateTex(int)': 
main.cpp:(.text+0xc6): undefined reference to `glDispatchCompute' 
/tmp/ccQ8pShN.o: In function `genTexture()': 
opengl_util.cpp:(.text+0x3df): undefined reference to `glBindImageTexture' 
/tmp/ccQ8pShN.o: In function `initGL()': 
opengl_util.cpp:(.text+0x7dd): undefined reference to `glXCreateContextAttribsARB' 
collect2: error: ld returned 1 exit status 
make: *** [example] Error 1 

내가 무엇을 놓치고를?

+1

왜 일부 코드가 보이지 않습니까? – chbaker0

+0

내 질문에 링크가 모든 코드를 제공합니다. 이 [사이트] (http://wili.cc/blog/opengl-cs.html)의 작은 예입니다. –

+1

죄송합니다. – chbaker0

답변

1

해당 기능은 플랫폼의 최소 구현에서 제공하지 않는 OpenGL/GLX 확장입니다.

glXGetProcAddress (...)을 사용하여 런타임에로드해야하기 때문에 사용자가 직접 링크하는 라이브러리에 포함되어 있지 않습니다. GLEW과 같은 확장 관리 라이브러리에 연결하여 더러운 작업을 수행 할 수 있지만 새로운 연결 종속성을 추가하는 것 이상의 작업을 수행해야합니다.

일반적으로 해당 라이브러리를 초기화해야합니다. 후에 OpenGL 렌더링 컨텍스트를 만듭니다. WGL (Windows)과 GLX (X11)를 구분하는 한 가지는 GLX로 확장을로드하기 전에 GL 컨텍스트를 만들 필요가 없다는 것입니다. 실제로 glXCreateContextAttribsARB, glDispatchComputeglBindImageTexture을로드 할 수 있습니다. 너는 문맥이있다. 그러나 런타임에 두 함수 포인터가 나중에 수행 할 것인지 여부는 다른 이야기이지만 사용자가 만든 컨텍스트의 기능에 따라 달라집니다.

0

정의되지 않은 참조는 당신이 뭔가를 링크 잊고 라이브러리

+0

그러나 OpenGL.h에이 라인'#include '이있는 OpenGL 헤더가 포함되어 있습니다. –

+0

아니요, 그는 라이브러리가 누락되었습니다. – chbaker0

+0

작전, 죄송합니다. 당신 말이 맞아요. –

0

에 연결하지 않았 음을 의미합니다. GLEW를 사용하고 있다면 glew32.lib (또는 libglew32.a 또는 시스템에 관계없이)에 링크되어 있는지 확인하십시오.