es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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'
undefined 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’

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
Tags:  , ,

Answer

  1. Avatar for 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 agregar glut 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.

Comments are closed.