2015-04-05 163 views
7

我下面this tutorial。我cmake'dmake/make install'dglfwglew完美(據我所知)。然而,當我嘗試編譯的代碼示例...未定義的引用編譯的OpenGL/GLFW/GLEW在Ubuntu(克++)

#define GLEW_STATIC 
#include <GL/glew.h> 
#include <GLFW/glfw3.h> 

int main() 
{ 
    glfwInit(); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    return 0; 
} 

......用他的連接標誌...

-lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi 

...我收到以下錯誤:

/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_init.c.o): undefined reference to symbol 'XF86VidModeQueryExtension' 
/usr/lib/x86_64-linux-gnu/libXxf86vm.so.1: error adding symbols: DSO missing from command line 

我Google'd錯誤,有人建議增加-lXxf86vm。它擺脫了最初的錯誤,但增加了一個顯着的數字:

/usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions': 
x11_init.c:(.text+0x1b93): undefined reference to `XineramaQueryExtension' 
x11_init.c:(.text+0x1bad): undefined reference to `XineramaIsActive' 
/usr/local/lib/libglfw3.a(x11_init.c.o): In function `_glfwCreateCursor': 
x11_init.c:(.text+0x22ee): undefined reference to `XcursorImageCreate' 
x11_init.c:(.text+0x23c5): undefined reference to `XcursorImageLoadCursor' 
x11_init.c:(.text+0x23d5): undefined reference to `XcursorImageDestroy' 
/usr/local/lib/libglfw3.a(x11_monitor.c.o): In function `_glfwPlatformGetMonitors': 
x11_monitor.c:(.text+0x743): undefined reference to `XineramaQueryScreens' 

如何找出我需要的標誌?如果重要的話,這是我的生成文件的結構:

CC = g++ 
COMPILER_FLAGS = -std=c++11 
FILES = *.cpp 
LINKER_FLAGS = -lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi -lXxf86vm 
OBJS = *.o 
LINUX_BIN = HelloWindow 

#Compile(output into error.txt if there is an error), link, then run 
linux: 
    $(CC) $(COMPILER_FLAGS) -c $(FILES) 2> "errors.txt" 
    $(CC) $(COMPILER_FLAGS) $(OBJS) -o $(LINUX_BIN) $(LINKER_FLAGS) 
    ./$(LINUX_BIN)   

謝謝!

+4

對於GLFW,你可能需要用'-lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lm' – derhass 2015-04-05 17:00:48

+1

你怎麼知道連接標誌使用? – MrSnappingTurtle 2015-04-05 17:42:47

+1

通過查看未解決的符號...... – derhass 2015-04-05 17:51:42

回答

25

Derhass是正確的。以下是我使用的標誌:

-lGLEW -lglfw3 -lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lm -pthread 
+1

我也能夠在得到工作時,使用此答案GLFW v2編譯並鏈接爲一個靜態對象。 – 2015-11-01 19:44:16

+4

我還必須在Ubuntu上添加'-ldl'標誌,並且能夠刪除'-lrt'和'-lm'標誌。我認爲這一切都歸結爲軟件包的組合/安裝方式,但是這個列表是全部的 - 包括哪些是很好的。 – 2016-08-13 08:22:42

相關問題