2016-08-02 179 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