2016-04-06 371 views
0

使用Ubuntu 14.04,g ++,我想將一個項目從make移植到cmake。當我sudo make install獲得以下錯誤。C++ GL鏈接未定義的參考

Linking CXX executable texmapper 
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../.. 
/lib/libplibssg.a(ssgLeaf.o): undefined reference to symbol 'glNewList' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libGL.so: 
error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 

像本網站上遇到的許多鏈接器錯誤。但通常建議的修復程序"-lGL -lGLU -lglut不起作用。我也嘗試了一些這樣的排列。

未定義參考glNewList之前,我有一個未定義的參考glPopClientAttrib,我加入lGL,這樣解決:

set(CMAKE_CXX_FLAGS "-lGL") 

所以,我在正確的軌道上,但得到的答覆是躲避我。

編輯:完整的命令(詳細):

/usr/bin/c++ -lGLEW -lGL -lGLU -lglut CMakeFiles/texmapper.dir/maintexmapper.o CMakeFiles/texmapper.dir/ssgSaveAC.o -o texmapper -rdynamic -Wl,-Bstatic -lplibsg -lplibssg -lplibul -Wl,-Bdynamic ../../libs/tgf/libtgf.so ../../libs/tgfclient/libtgfclient.so -lglut -lXmu -lXi -lpng -lz -lSM -lICE -lX11 -lXext -lXrandr -Wl,-rpath,/home/jeroen/Thesis/torcsCMAKE/trunk/src/libs/tgf:/home/jeroen/Thesis/torcsCMAKE/trunk/src/libs/tgfclient 
+0

許多OpenGL程序使用glew庫,所以也許嘗試在那裏添加-lGLEW? – Jas

+0

感謝您的建議。在別人之前和之後嘗試了-lGLEW,但它並未解決錯誤。 – jeroen

+1

CMAKE_CXX_FLAGS包含要傳遞給C++編譯器的選項。 '-l'選項,例如'-lGL',是鏈接器選項,不是編譯器選項。 CMake期望'CXX_EXE_LINKER_FLAGS'中的鏈接器選項。參見[cmake-variables](https://cmake.org/cmake/help/v3.0/manual/cmake-variables.7.html) –

回答

1

隨着C進行所需的庫是使用target_link_libraries命令進行設置。通常,您將使用find_package(OpenGL)來收集OpenGL開發和庫文件的位置,並使用target_link_libraries命令的程序包變量。像這樣:

find_package(OpenGL) 
add_executable(foo …) 
target_link_libraries(foo ${OPENGL_gl_LIBRARY} …)