【问题标题】:How to fix undefined reference to symbol 'dlclose@@GLIBC_2.2.5' from glad.c [duplicate]如何修复glad.c中对符号'dlclose@@GLIBC_2.2.5'的未定义引用[重复]
【发布时间】:2019-11-12 11:25:45
【问题描述】:

我正在按照https://learnopengl.com/ 的教程学习 Opengl 我在使用 cmake(See Creating a window) 设置依赖时遇到问题。

我的 CMakeLists.txt 基于 GLFW documentation

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.c.o CMakeFiles/gltuto.dir/src/glad.c.o -o gltuto /usr/lib/libglfw.so.3.3 && :

/usr/bin/ld: CMakeFiles/gltuto.dir/src/glad.c.o: 未定义对符号'dlclose@@GLIBC_2.2.5'的引用

/usr/bin/ld: /usr/lib/libdl.so.2: 添加符号时出错:命令行中缺少 DSO

collect2: 错误:ld 返回 1 个退出状态

ninja:构建停止:子命令失败。

【问题讨论】:

  • DSO missing from command line 很明显,需要加上-ldl。虽然链接器调用一开始真的很奇怪,但是将绝对路径传递给库会怎么样。

标签: c opengl cmake glfw glad


【解决方案1】:

链接器抱怨找不到dlclose。 您可以添加libdlCMAKE_DL_LIBS。 此外,利用现代链接与 targets 而不是 strings

将您的 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})

查看Generator Expressions 以了解BUILD_INTERFACEINSTALL_INTERFACE

【讨论】:

  • 谢谢。正如您所建议的,只需将 ${CMAKE_DL_LIBS} 添加到 target_link_libraries 就可以了。
猜你喜欢
  • 2016-03-12
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2013-04-21
  • 2014-07-11
  • 1970-01-01
相关资源
最近更新 更多