9

我正在按照https://learnopengl.com/上的教程学习 Opengl,但在 使用 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 成功构建了我的配置,但 ninja 无法编译并打印错误。

[1/1] 链接 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:错误:ld 返回 1 个退出状态

忍者:构建停止:子命令失败。

4

1 回答 1

21

链接器抱怨找不到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_INTERFACEINSTALL_INTERFACE

于 2019-07-01T20:30:49.977 回答