【问题标题】:Cmake can't link glut library after system update系统更新后Cmake无法链接过剩库
【发布时间】:2022-01-15 17:47:22
【问题描述】:

在我今天更新系统之前,一切都很顺利。 我的 CMakeList.txt 看起来像这样:

cmake_minimum_required(VERSION 2.7)
project(p3)

# Set the C++ Standard
set(CMAKE_CXX_STANDARD 17)

# Set the compiling flags
set(CMAKE_CXX_FLAGS "-Werror -pedantic -Wall -Wextra -Wvla")

# Find the OpenGL library
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})

# Find the GLUT library
find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIR})

# Build
add_executable(p3 ...)
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} m)

但是更新之后就出错了! 编译时有很多错误: (我用的是freeglut)

undefined reference to `glutInit'
ndefined reference to `glutInitWindowSize'
undefined reference to `glutInitWindowPosition'
undefined reference to `glutInitDisplayMode'
undefined reference to `glutCreateWindow'
undefined reference to `glutDisplayFunc'
undefined reference to `glutIdleFunc'
undefined reference to `glutMainLoop'

似乎 cmake 无法链接 glut 库。 但是glVertex2f 等其他功能也可以。 而且使用g++编译也是可以的。 现在我必须将我的 CMakeList 更改为:

// ...
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} glut m)

在我添加 glut 后,它又可以工作了。 为什么会发生这种情况? 我该如何解决?

有用信息:

cmake version 3.22.1

【问题讨论】:

  • 如果您拥有 CMake 3.22,则没有任何理由将 2.7 设置为最低要求。我几乎可以保证你的项目在 2.7 中不会像你期望的那样工作

标签: c++ cmake glut


【解决方案1】:

不要将包变量扩展为目录命令! 总是,总是,总是使用导入的目标

cmake_minimum_required(VERSION 3.22)
project(p3)

find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)

add_executable(p3 ...)
target_link_libraries(p3 OpenGL::GL GLUT::GLUT m)
target_compile_features(p3 PRIVATE cxx_std_17)

编写、阅读和维护更简单。

【讨论】:

    【解决方案2】:

    当使用find_package 查找某个包时,请查阅其文档以了解它定义了哪些变量或目标。 FindGLUT.cmake 的文档告诉脚本定义了变量 GLUT_LIBRARIES,因此对于与 GLUT 的链接,您需要使用该变量,而不是 GLUT_LIBRARY 一个。

    如果不确定您是否使用了正确的变量,则打印其内容。例如。与

    message("GLUT_LIBRARY: ${GLUT_LIBRARY}")
    

    在大多数情况下,变量的空内容意味着您使用了错误的变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-17
      • 2017-04-04
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多