簡體   English   中英

GLEW + cmake鏈接失敗“未定義引用符號glDrawElements”+“DSO從命令行中丟失”

[英]GLEW + cmake linking fails “undefined reference to symbol glDrawElements” + “DSO missing from command line”

我將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-Creator)

我認為在閱讀了這個問題的答案后,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})

那就解決了! :)

我在使用CMake配置GLEW時遇到了類似的問題,應用http://www.opengl-tutorial.org的基礎教程#2進行測試。

我使用的是GLFW而不是SDL,但根本原因是一樣的。

最近的CMake(> = 3.1),我們只需要:

find_package(OpenGL REQUIRED)
target_link_libraries( myApp OpenGL::GL )

find_package ( GLEW REQUIRED )
target_link_libraries( myApp GLEW::GLEW )   

正如您所指出的,如果不尋找openGL,我們會遇到“未定義的引用”問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM