2014-01-24 180 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

我的問題中的鏈接提供了所有的代碼。這是[site]的一個小例子(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中包含OpenGL頭文件'#include ' –

+0

不,他錯過了這些庫。 – chbaker0

+0

ops,對不起。你是對的 –

0

你忘記的東西聯繫起來。如果您使用的是GLEW,請確保您鏈接到glew32.lib(或libglew32.a或任何適用於您的系統的程序)。