我正在使用Cmake链接GLEW、SDL2和Assimp。在生成.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})
我尝试更改链接顺序,因为我读到这可能是个问题。由于错误中的libGL问题,我还添加了OpenGL。但似乎不起作用。我还阅读了使用
pkg-config --print-requires --print-requires-private glew
检查依赖关系,但问题在于它有20多个不同的库依赖于它。我需要链接它们所有吗?并不是说我没有正确的库,上周我在这台电脑上创建了一个基本OpenGL程序,并且运行良好(我使用了其他方式链接我的库,还使用了Code::Blocks而不是Qt-Creator)。
我认为根据这个问题的答案,DSO可能是问题所在。但这难道不意味着在cmakefile中执行OpenGL操作就可以解决它吗?
谢谢!
编辑:我可以创建VertexArrays、VertexBuffers等。但只要我添加调用
glDrawElements(...)
或glDrawArrays(...)
,就会出现那个错误。(可能还会在其他函数上遇到该错误,但这些是当我尝试渲染基本网格时遇到该错误的唯一函数)