2013-10-14 22 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 

これが私のメイクです:

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

がこの順でそれを実行します。代わりにこの1の

-lglfw3 -lGLU -lGL 

を:

-lGL -lGLU -lglfw3 

GCCを使用すると、リンク段階でライブラリを指定する順序に非常に敏感です。例えばlibA.alibB.aに依存している場合、その後、あなたは次のようにリンカーを起動する必要があると思います:あなたのケースでは

gcc ... -lA -lB ... 

libglfw3.aは明らかに、したがって、あなたが取得しているエラー、libGL.aに依存します。

+0

ああ、とにかくおかげです。 – mezo