我正在按照以下教程学习 Openglhttps://learnopengl.com/ https://learnopengl.com/我在使用 cmake 设置依赖关系时遇到问题(请参阅创建窗口 https://learnopengl.com/Getting-started/Creating-a-window).
我的 CMakeLists.txt 基于GLFW 文档 https://www.glfw.org/docs/latest/build_guide.html#build_link_cmake_package.
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
失败:饕餮
:&& /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:构建停止:子命令失败。
链接器抱怨找不到dlclose
。
你可以加libdl
with CMAKE_DL_LIBS https://cmake.org/cmake/help/v3.14/variable/CMAKE_DL_LIBS.html。
此外,利用现代链接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})
Look up 生成器表达式 https://cmake.org/cmake/help/v3.14/manual/cmake-generator-expressions.7.html?highlight=generator%20expressions去理解BUILD_INTERFACE
and INSTALL_INTERFACE
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)