Как исправить неопределенную ссылку на символ 'dlclose@@GLIBC_2.2.5' от glad.c
Я изучаю Opengl, следуя инструкциям на https://learnopengl.com/ и у меня возникают проблемы с установкой зависимости с помощью cmake( см. Создание окна).
Я основал свой CMakeLists.txt на документации 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 удалось построить мою конфигурацию, но ниндзя не удалось скомпилировать и вывести ошибку.
[1/1] Linking C исполняемый файл gltuto
СБОЙ: 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: неопределенная ссылка на символ 'dlclose @@ GLIBC_2.2.5'
/ usr / bin / ld: /usr/lib/libdl.so.2: ошибка при добавлении символов: DSO отсутствует в командной строке
collect2: error: ld вернул 1 состояние выхода
ниндзя: сборка остановлена: подкоманда не выполнена.
1 ответ
Линкер жалуется, что не нашел dlclose
, Можете добавить libdl
с CMAKE_DL_LIBS. Кроме того, используйте современную связь с целями вместо строк.
Измените ваш CMakeLists.txt на:
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})
Посмотрите выражения генератора, чтобы понять BUILD_INTERFACE
а также INSTALL_INTERFACE
,