【问题标题】:Getting freeglut library to work with opengl让 freeglut 库与 opengl 一起工作
【发布时间】:2016-08-02 00:46:00
【问题描述】:

我正在尝试为课程学习 opengl,但在设置时遇到了麻烦。我正在使用带有 IDE CLion 和 cygwin64 的 Windows。到目前为止,我已经能够编译和运行 Gl.h 和 Glu.h,但是我在获取 freeglut 的静态库时遇到了麻烦。

现在在 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)。我试图寻找关于它是如何完成的解释,但没有找到答案。谁能帮忙解释一下怎么做?

【问题讨论】:

    标签: c++ opengl clion freeglut


    【解决方案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 )
    

    【讨论】:

    • 现在我收到“找不到 X11”的错误。我去下载了 cygwin/x,包括 x-org 服务器和 xinit,但仍然无法正常工作。
    • @ChrisProcak:嗯,您遇到的问题是,Cygwin 试图提供与 Linux 的最大兼容性。在 Linux 中,您通过 X 服务器进行图形处理。但是在 Windows 中没有 X 服务器(除非您启动 Cygwin 附带的 X 服务器,但对 OpenGL 的支持充其量是微不足道的)。 我强烈建议您使用 MinGW 而不是 Cygwin 来编译您的项目。最简单的安装方法是使用 MSys2 安装程序msys2.github.io 获得 MSys2 环境,然后在其中安装 mingw。这将为您提供所需的原生 OpenGL 支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2016-10-06
    • 2011-11-30
    • 2014-02-19
    相关资源
    最近更新 更多