c++ - 系统更新后Cmake无法链接glut库

标签 c++ cmake glut

今天更新系统之前,一切都很顺利。 我的 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

最佳答案

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

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

message("GLUT_LIBRARY: ${GLUT_LIBRARY}")

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

关于c++ - 系统更新后Cmake无法链接glut库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70314595/

相关文章:

c++ - 使用Cmake编译LZO时提示找不到任何VS实例

cmake - 如何在 Windows 中使用 cmake 构建和链接 google benchmark

c++ - 删除四面体网格中内部元素的算法

python - 使用不同的显示opengl

c++ - 让回调记住一些信息的好方法(C++)

c++ - 一种颜色内的最大矩形

c++ - 从 CImage AtlImage 获取缓冲区数组

c++ - 获取指向非静态成员函数的函数指针

c++ - CMake 文件找不到 Qt 图表模块

c++ - 从相机旋转 openGL 中隔离 "Compass"