Cómo corregir una referencia indefinida al símbolo ‘dlclose@@GLIBC_2.2.5’ de glad.c [duplicate]

2 minutos de lectura

Avatar de usuario de SeaEyeHay
MarOjoHeno

Estoy aprendiendo Opengl siguiendo el tutorial en https://learnopengl.com/
y tengo problemas para configurar la dependencia con cmake(Ver Crear una ventana).

Basé mi CMakeLists.txt en el Documentación GLFW.

cmake_minimum_required(VERSION 3.14)
project(openglTuto)


include_directories(include)
add_executable(gltuto src/main.c src/glad.c)

find_package(glfw3 3.3 REQUIRED)
find_package(OpenGL REQUIRED)

target_link_libraries(gltuto glfw)
target_include_directories(gltuto PUBLIC ${OPENGL_INCLUDE_DIR})
target_link_libraries(gltuto ${OPENGL_gl_LIBRARY})

CMake tuvo éxito en la construcción de mi configuración, pero ninja no pudo compilar e imprimir un error.

[1/1] Vinculación del ejecutable C gltuto

ERROR: gltuto: && /usr/bin/cc CMakeFiles/gltuto.dir/src/main.co CMakeFiles/gltuto.dir/src/glad.co -o gltuto /usr/lib/libglfw.so.3.3 && :

/usr/bin/ld: CMakeFiles/gltuto.dir/src/glad.co: referencia indefinida al símbolo ‘dlclose@@GLIBC_2.2.5’

/usr/bin/ld: /usr/lib/libdl.so.2: error al agregar símbolos: falta DSO en la línea de comando

collect2: error: ld devolvió 1 estado de salida

ninja: compilación detenida: el subcomando falló.

  • DSO missing from command line es bastante obvio, necesitas agregar -ldl. Aunque esa llamada del enlazador es realmente extraña en primer lugar, con pasar rutas absolutas a las bibliotecas.

    – o11c

    1 de julio de 2019 a las 20:29

El enlazador se queja de no encontrar dlclose. Puedes añadir libdl con CMAKE_DL_LIBS. Además, haga uso de la vinculación moderna con objetivos en vez de instrumentos de cuerda.

Cambie su CMakeLists.txt a:

cmake_minimum_required(VERSION 3.14)
project(openglTuto)


add_executable(gltuto src/main.c src/glad.c)

find_package(glfw3 3.3 REQUIRED)
find_package(OpenGL REQUIRED)

target_include_directories(gltuto PUBLIC
                           $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
                           $<INSTALL_INTERFACE:include>)
target_link_libraries(gltuto PUBLIC glfw OpenGL::GL ${CMAKE_DL_LIBS})

Buscar Expresiones generadoras comprender BUILD_INTERFACE y INSTALL_INTERFACE.

  • Gracias. Como sugirió, simplemente agregar ${CMAKE_DL_LIBS} a target_link_libraries funcionó.

    – Shubham Agrawal

    30 de abril de 2021 a las 2:40

¿Ha sido útil esta solución?