gpt4 book ai didi

c++ - GLEW + cmake 链接失败 "undefined reference to symbol glDrawElements"+ "DSO missing from command line"

转载 作者:太空狗 更新时间:2023-10-29 20:38:30 29 4
gpt4 key购买 nike

我正在将 GLEW、SDL2 和 Assimp 与 Cmake 链接起来。构建 .o 文件时似乎工作正常,但是在链接它们时出现这些错误

:-1: error: CMakeFiles/"Projectpath".cpp.o: undefined reference to symbol 'glDrawElements'
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1:-1: error: error adding symbols: DSO missing from command line
:-1: error: collect2: error: ld returned 1 exit status

这是链接库的 Cmakefile 部分

find_package(OpenGL)
find_package(GLEW)
find_package(SDL2)
find_package(Assimp)
#Include(FindPkgConfig)
#PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
set(INCLUDE_DIRS ${OpenGL_INCLUDE_DIRS} ${SDL2_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${Assimp_INCLUDE_DIRS})
set(LIBS ${LIBS} ${OpenGL_LIBRARIES} ${SDL2_LIBRARIES} ${GLEW_LIBRARIES} ${Assimp_LIBRARIES} )
include_directories(${INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} ${LIBS})

我尝试更改链接顺序,因为我读到这可能是个问题。我还添加了 OpenGL 的东西,因为错误中的 libGL 东西,它似乎不起作用。我还阅读了有关使用 pkg-config --print-requires --print-requires-private glew 检查依赖项的信息,但问题是它依赖于 20 个不同的库。我需要链接所有这些吗?

并不是我没有正确的库,上周我在这台计算机上创建了一个基本的 OpenGL 程序并且运行良好(我使用了另一种方法来链接我的库并且还使用了 Code::Blocks 而不是 Qt-创作者)

在阅读 this question 的答案后,我假设 DSO 是问题所在.但这不应该意味着在 cmakefile 中执行 OpenGL 操作可以解决问题吗?

谢谢!

编辑:我可以创建 VertexArrays、VertexBuffers 等。但是一旦我添加对其中任何一个的调用。 glDrawElements(...)glDrawArrays(...) 我收到了那个错误。 (我也可能在其他一些函数上遇到该错误,但这是我在尝试渲染基本网格时遇到的唯一错误)

最佳答案

问题是在 OpenGL_INCLUDE_DIRS 和 OpenGL_LIRARIES 中实际上是 OPENGL_INCLUDE_DIRS(<-- 不太确定我需要那个,我可能不需要)和 OPENGL_LIBRARY所以我在问题中遇到的 CmakeFile 片段实际上应该是这样的

find_package(OpenGL)
find_package(GLEW)
find_package(SDL2)
find_package(Assimp)
#Include(FindPkgConfig)
#PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
set(INCLUDE_DIRS ${INCLUDE_DIRS} ${OPENGL_INCLUDE_DIRS} ${SDL2_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${Assimp_INCLUDE_DIRS}) #<--- Changed this from ${OpenGL_INCLUDE_DIRS} to ${OPENGL_INCLUDE_DIRS} (Again not sure I need that variable)
set(LIBS ${LIBS} ${OPENGL_LIBRARY} ${SDL2_LIBRARIES} ${GLEW_LIBRARIES} ${Assimp_LIBRARIES} ) #<---(Changed this from ${OpenGL_LIBRARIES} to ${OPENGL_LIBRARY}
include_directories(${INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} ${LIBS})

然后就解决了! :)

关于c++ - GLEW + cmake 链接失败 "undefined reference to symbol glDrawElements"+ "DSO missing from command line",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249516/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com