2016-08-02 76 views
0

我想學習一個類的opengl,但在安裝時遇到了麻煩。我正在使用Windows,IDE CLion和cygwin64。到目前爲止,我已經能夠編譯並運行Gl.h和Glu.h,但是我無法獲得freeglut的靜態庫。讓Freeglut庫與opengl一起工作

現在就在的CMakeLists.txt文件的最後一行程序錯誤:

cmake_minimum_required(VERSION 3.5) 
project(OpenGLAugust) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 
add_executable(OpenGLAugust ${SOURCE_FILES}) 
target_link_libraries(OpenGLAugust libopengl32.a libglu32.a libfreeglut.a) 

錯誤

cannot find -lfreeglut 
collect2: error: ld returned 1 exit status 

我看着它,它看來,在下載freeglut後,我需要創建來自源代碼的庫文件(特別是.a文件libfreeglut32.a)。我曾嘗試尋找關於如何完成的解釋,但沒有找到答案。任何人都可以幫助解釋如何做到這一點?

回答

1

不同於OpenGL,Windows ABI強制要求編譯器工具鏈中的可用性,FreeGLUT是可選的第三方庫,必須單獨安裝。

最簡單的做法是簡單地將FreeGLUT源代碼放到項目的子目錄中,然後將其添加到CMakeLists.txt中; FreeGLUT提供了一個可以使用CMake配置的工具,這樣就可以「正常工作」。

在一個側面說明,你不應該使用

target_link_libraries(OpenGLAugust libopengl32.a libglu32.a …) 

find_package(OpenGL) 
target_link_libraries(OpenGLAugust 
    ${OPENGL_gl_LIBRARY} 
    ${OPENGL_glu_LIBRARY} 
    …) 

即總共你應該將FreeGLUT源代碼提取到你項目的子目錄中,並將你的CMakeLists改爲

cmake_minimum_required(VERSION 3.5) 
project(OpenGLAugust) 
find_package(OpenGL) 
add_subdirectory(freeglut) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 
add_executable(OpenGLAugust ${SOURCE_FILES}) 
target_link_libraries(OpenGLAugust 
     ${OPENGL_gl_LIBRARY} 
     ${OPENGL_glu_LIBRARY} 
     freeglut_static) 
+0

現在我收到「找不到X11」的錯誤。我去了並下載了包括x-org服務器和xinit的cygwin/x,但仍然無法工作。 –

+1

@ChrisProcak:好的,你遇到的問題是,Cygwin試圖提供與Linux的最大兼容性。在Linux中,您可以通過X服務器來執行圖形操作。但是在Windows中沒有X服務器(除非你啓動Cygwin附帶的X服務器,但OpenGL對它的支持最多不過)。 *代替Cygwin,我強烈建議你使用MinGW來編譯你的項目。最簡單的安裝方法是使用MSys2安裝程序https://msys2.github.io/來獲取MSys2環境,然後在其中安裝mingw。這會給你你想要的原生OpenGL支持。* – datenwolf