2017-02-28 46 views
1

我在試圖學習OpenGL。我使用Clion作爲IDE,它使用CMakeLists.txt文件來組織/編譯項目。在學習OpenGL時找不到glClear

編譯器不能出於某種原因找到glClear

Undefined symbols for architecture x86_64: 
    "_glClear", referenced from: 
     _main in main.cpp.o 
    "_glClearColor", referenced from: 
     _main in main.cpp.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [GraphicsPractice] Error 1 
make[1]: *** [CMakeFiles/GraphicsPractice.dir/all] Error 2 
make: *** [all] Error 2 

我能夠成功鏈接GLEWGLFW,但是,我的代碼休息時,我打電話glClear(GL_COLOR_BUFFER_BIT)。我不知道爲什麼。如果有人能幫助我指出正確的方向,那會很棒。

CMakeList.txt

cmake_minimum_required(VERSION 3.6) 
project(GraphicsPractice) 

set(CMAKE_CXX_STANDARD 14) 

set(SOURCE_FILES src/main.cpp) 

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) 
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) 
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) 

add_subdirectory(deps/glfw) 

find_package(OpenGl REQUIRED) 
find_package(GLEW REQUIRED) 

include_directories("deps/glfw/include/") 

add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 

target_link_libraries(${PROJECT_NAME} glfw glew) 

的main.cpp

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

int main() { 

    glfwInit(); 

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", 0, nullptr); 

    glfwMakeContextCurrent(window); 

    glewExperimental = GL_TRUE; 
    glewInit(); 


    while (!glfwWindowShouldClose(window)) { 
     glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
     glClear(GL_COLOR_BUFFER_BIT); 

     if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) 
      glfwSetWindowShouldClose(window, GL_TRUE); 

     glfwSwapBuffers(window); 
     glfwPollEvents(); 
    } 

    glfwTerminate(); 
    return 0; 
} 
+0

這是一個鏈接器錯誤,而不是編譯器錯誤。你沒有鏈接到opengl庫。 – xaxxon

+0

你使用[OSX](http://stackoverflow.com/questions/16731572/opengl-object-not-found-for-architecture-x86-64)? – genpfault

+0

@genpfault是的,我是。 –

回答

2

您需要鏈接OpenGL庫。即:

target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} glfw glew etc...)