2015-04-05 15 views
7

Tôi đang theo dõi this tutorial. Tôi cmake'dmake/make install'dglfwglew hoàn hảo (theo như tôi biết). Tuy nhiên, khi tôi cố gắng để biên dịch mã mẫu ...Tài liệu tham khảo không xác định Biên dịch OpenGL/glfw/glew trên Ubuntu (g ++)

#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; 
} 

... sử dụng cờ mối liên kết của mình ...

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

... Tôi nhận được lỗi sau:

/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 

Tôi đã gặp lỗi và ai đó đã đề xuất thêm -lXxf86vm. Nó đã thoát khỏi những lỗi đầu tiên, nhưng thêm vào một số lượng đáng kể hơn:

/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' 

Làm thế nào để tìm ra những gì cờ tôi cần? Nếu vấn đề là cách makefile của tôi được cấu trúc:

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)   

Cảm ơn!

+4

Đối GLFW, bạn có thể cần '-lGL -lX11 -lXi -lXrandr -lXxf86vm -lXinerama -lXcursor -lrt -lm' – derhass

+1

Làm sao bạn biết những gì cờ mối liên kết để sử dụng ? – MrSnappingTurtle

+1

Bằng cách xem các biểu tượng chưa được giải quyết ... – derhass

Trả lời

25

Derhass là chính xác. Sau đây là những lá cờ tôi đã sử dụng:

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

Tôi cũng có thể sử dụng Câu trả lời này khi làm việc để nhận GLFW v2 để biên dịch và liên kết như một đối tượng tĩnh. –

+4

Tôi cũng phải thêm cờ '-ldl' trên Ubuntu, và có thể loại bỏ các cờ' -lrt' và '-lm'. Tôi nghĩ rằng tất cả đi xuống đến những gì kết hợp của các gói/cách chúng được cài đặt, nhưng danh sách này là tất cả, bao gồm đó là rất tốt. –

Các vấn đề liên quan