我正在按照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个退出状态
忍者:构建停止:子命令失败。
答案 0 :(得分:1)
链接器抱怨找不到dlclose
。
您可以将libdl
与CMAKE_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_INTERFACE
和INSTALL_INTERFACE
。