2013-10-14 121 views
8

我編譯我的程序使用glfw3庫時出現問題。glfw3編譯未定義的引用

當我嘗試使用make進行編譯時,我收到了未定義引用的錯誤列表,但我的類被編譯爲.o文件,只有最終的可執行文件未被創建。

標準輸出:

g++ -Wall -g -c main.cpp -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

g++ -Wall -g -c error.cpp -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

g++ -Wall -g -c sWindow.cpp -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

g++ -Wall -g -o ecl main.o error.o sWindow.o -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 

標準錯誤:

/usr/local/lib/libglfw3.a(context.c.o): In function `parseGLVersion': 
context.c:(.text+0x53): undefined reference to `glGetString' 
/usr/local/lib/libglfw3.a(context.c.o): In function `_glfwRefreshContextAttribs': 
context.c:(.text+0x907): undefined reference to `glGetIntegerv' 
context.c:(.text+0x98a): undefined reference to `glGetIntegerv' 
context.c:(.text+0x9df): undefined reference to `glGetIntegerv' 
context.c:(.text+0xa32): undefined reference to `glGetIntegerv' 
/usr/local/lib/libglfw3.a(context.c.o): In function `glfwExtensionSupported': 
context.c:(.text+0xd59): undefined reference to `glGetString' 
context.c:(.text+0xd93): undefined reference to `glGetIntegerv' 
/usr/local/lib/libglfw3.a(window.c.o): In function `glfwCreateWindow': 
window.c:(.text+0x6f8): undefined reference to `glClear' 
/usr/local/lib/libglfw3.a(x11_time.c.o): In function `getRawTime': 
x11_time.c:(.text+0x20): undefined reference to `clock_gettime' 
/usr/local/lib/libglfw3.a(x11_time.c.o): In function `_glfwInitTimer': 
x11_time.c:(.text+0x72): undefined reference to `clock_gettime' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `getFBConfigAttrib': 
glx_context.c:(.text+0x51): undefined reference to `glXGetFBConfigAttrib' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `chooseFBConfig': 
glx_context.c:(.text+0x7e): undefined reference to `glXGetClientString' 
glx_context.c:(.text+0x104): undefined reference to `glXGetFBConfigs' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `createLegacyContext': 
glx_context.c:(.text+0x43f): undefined reference to `glXCreateNewContext' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwInitContextAPI': 
glx_context.c:(.text+0x48f): undefined reference to `glXQueryExtension' 
glx_context.c:(.text+0x4ca): undefined reference to `glXQueryVersion' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwCreateContext': 
glx_context.c:(.text+0x791): undefined reference to `glXGetVisualFromFBConfig' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwDestroyContext': 
glx_context.c:(.text+0xd09): undefined reference to `glXDestroyContext' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwPlatformMakeContextCurrent': 
glx_context.c:(.text+0xd55): undefined reference to `glXMakeCurrent' 
glx_context.c:(.text+0xd70): undefined reference to `glXMakeCurrent' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwPlatformSwapBuffers': 
glx_context.c:(.text+0xdc2): undefined reference to `glXSwapBuffers' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwPlatformExtensionSupported': 
glx_context.c:(.text+0xe69): undefined reference to `glXQueryExtensionsString' 
/usr/local/lib/libglfw3.a(glx_context.c.o): In function `_glfwPlatformGetProcAddress': 
glx_context.c:(.text+0xeb1): undefined reference to `glXGetProcAddressARB' 
collect2: ld returned 1 exit status 
make: *** [ecl] Error 1 

這是我的makefile:

CXX = g++ 
CXXFLAGS = -Wall -g 
LIBS = -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi 
DEPENDENCIES = main.o error.o sWindow.o 

# **************************************************** 
# Targets needed to bring the executable up to date 

ecl: $(DEPENDENCIES) 
    $(CXX) $(CXXFLAGS) -o ecl $(DEPENDENCIES) $(LIBS) 

main.o: main.cpp 
    $(CXX) $(CXXFLAGS) -c main.cpp $(LIBS) 

error.o: error.cpp 
    $(CXX) $(CXXFLAGS) -c error.cpp $(LIBS) 

sWindow.o: sWindow.cpp 
    $(CXX) $(CXXFLAGS) -c sWindow.cpp $(LIBS) 

clean: 
    rm -f *.o main 
    echo "Clean done" 

你有任何想法是什麼原因導致這個問題以及如何解決它?

回答

12

做,在這個順序:

-lglfw3 -lGLU -lGL 

而是這一個:

-lGL -lGLU -lglfw3 

GCC是到您在鏈接階段指定庫的順序非常敏感。例如,如果libA.a取決於libB.a,那麼你就必須以下列方式來調用鏈接:

gcc ... -lA -lB ... 

在你的情況,libglfw3.a顯然取決於libGL.a,因此,你所得到的錯誤。

+0

哦,我看到了,無論如何感謝vm – mezo

相關問題