【发布时间】: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。虽然链接器调用一开始真的很奇怪,但是将绝对路径传递给库会怎么样。