So beheben Sie einen undefinierten Verweis auf das Symbol „dlclose@@GLIBC_2.2.5“ von glad.c [duplicate]

Lesezeit: 2 Minuten

Benutzeravatar von SeaEyeHay
SeaEyeHay

Ich lerne Opengl, indem ich dem Tutorial unter folge https://learnopengl.com/
und ich habe Probleme beim Einrichten der Abhängigkeit mit cmake(Siehe Erstellen eines Fensters).

Ich habe meine CMakeLists.txt auf der Grundlage von GLFW-Dokumentation.

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 kann meine Konfiguration erfolgreich erstellen, aber Ninja kann einen Fehler nicht kompilieren und drucken.

[1/1] Verlinkung der ausführbaren C-Datei gltuto

FEHLGESCHLAGEN: 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: undefinierter Verweis auf Symbol „dlclose@@GLIBC_2.2.5“

/usr/bin/ld: /usr/lib/libdl.so.2: Fehler beim Hinzufügen von Symbolen: DSO fehlt in der Befehlszeile

collect2: Fehler: ld hat 1 Exit-Status zurückgegeben

ninja: Build gestoppt: Unterbefehl fehlgeschlagen.

  • DSO missing from command line ist ziemlich offensichtlich, müssen Sie hinzufügen -ldl. Obwohl dieser Linker-Aufruf in erster Linie wirklich seltsam ist, was mit der Übergabe absoluter Pfade an Bibliotheken zu tun hat.

    – o11c

    1. Juli 2019 um 20:29 Uhr

Der Linker beschwert sich darüber, dass er nicht gefunden wird dlclose. Du kannst hinzufügen libdl mit CMAKE_DL_LIBS. Nutzen Sie zusätzlich die moderne Verlinkung mit Ziele Anstatt von Saiten.

Ändern Sie Ihre CMakeLists.txt in:

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})

Nachschlagen Generatorausdrücke verstehen BUILD_INTERFACE und INSTALL_INTERFACE.

  • Danke. Wie Sie vorgeschlagen haben, reichte es aus, einfach ${CMAKE_DL_LIBS} zu target_link_libraries hinzuzufügen.

    – Shubham Agrawal

    30. April 2021 um 2:40 Uhr

1437530cookie-checkSo beheben Sie einen undefinierten Verweis auf das Symbol „dlclose@@GLIBC_2.2.5“ von glad.c [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy