如何修复glad.c中对符号“ dlclose @@ GLIBC_2.2.5”的未定义引用

时间:2019-07-01 20:11:33

标签: c cmake glfw glad

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

我基于GLFW documentation创建了CMakeLists.txt。

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]链接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个退出状态

     

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

1 个答案:

答案 0 :(得分: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