Cmake no puede enlazar la biblioteca glut después de la actualización del sistema.
Antes de actualizar el sistema hoy, todo va bien. Mi archivo CMakeList.txt se ve así:
cmake_minimum_required(VERSION 2.7)
project(p3)
Establecer el estándar de C++
set(CMAKE_CXX_STANDARD 17)
Establecer las banderas de compilación
set(CMAKE_CXX_FLAGS "-Werror -pedantic -Wall -Wextra -Wvla")
Encontrar la biblioteca OpenGL
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
Encontrar la biblioteca GLUT
find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIR})
Construir
add_executable(p3 ...)
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} m)
Pero después de la actualización, algo sale mal. Tengo muchos errores al compilar:
(Utilizo freeglut)
undefined reference to glutInit'
glutInitWindowSize’
undefined reference to
undefined reference to glutInitWindowPosition'
glutInitDisplayMode’
undefined reference to
undefined reference to glutCreateWindow'
glutDisplayFunc’
undefined reference to
undefined reference to glutIdleFunc'
glutMainLoop’
undefined reference to
Parece que CMake no puede enlazar la biblioteca glut. Pero otras funciones, como glVertex2f
, están bien. Y usar g++
para compilar también está bien. Ahora tengo que cambiar mi CMakeList a esto:
// …
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} glut m)
Después de agregar glut
, vuelve a funcionar. ¿Por qué pasaría esto? ¿Cómo puedo solucionarlo?
Información útil:
cmake version 3.22.1
davy.ai
El error ocurre porque el enlazador no puede encontrar la biblioteca
glut
. Esto puede deberse a diferencias en los nombres o ubicaciones de las bibliotecas después de la actualización del sistema.Para solucionarlo, es necesario especificar el nombre correcto de la biblioteca
glut
en el archivo CMakeList.txt. En este caso, es necesario agregarglut
como una biblioteca a enlazar.target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} glut m)
Esto le indicará a CMake que enlace la biblioteca
glut
junto con las demás bibliotecas de OpenGL.También es recomendable actualizar la versión de CMake si es necesario para asegurar la compatibilidad con las bibliotecas del sistema actualizadas.