2016-04-06 29 views
0

Ubuntu 14.04'ü kullanarak, g ++, bir projeyi cmake yapmaktan yapmak istiyorum. I sudo make install, aşağıdaki hatayı alma.C++ GL linker tanımsız başvuru

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 

Bu web sitesinde karşılaşılan birçok gibi bir bağlantı hatası. Ancak genellikle önerilen düzeltme, "-lGL -lGLU -lglut, çalışmıyor. Ben de bunun bazı permütasyonlarını denedim.

glNewList tanımsız başvuru Önce ben böyle, lGL eklenerek çözüldü glPopClientAttrib için tanımlanmamış bir başvuru vardı:

set(CMAKE_CXX_FLAGS "-lGL") 

Yani doğru yolda, ama cevap beni eluding edilir.

Düzenleme: tam komutu (ayrıntılı):

/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

Birçok OpenGL programı glew kitaplığını kullanır, belki de oraya -lGLEW eklemeyi deneyin. – Jas

+0

Öneriniz için teşekkürler. Diğerlerinden önce ve sonra denedim -lGLEW, ancak hatayı çözmedi. – jeroen

+1

CMAKE_CXX_FLAGS, C++ derleyicisine geçirilecek seçenekleri içerir. '-l 'seçenekleri, ör. '-lGL', derleyici seçenekleri değil, bağlayıcı seçenekleridir. CMake, "CXX_EXE_LINKER_FLAGS" adresindeki linker seçeneklerini bekliyor. Bakınız [cmake-değişkenler] (https://cmake.org/cmake/help/v3.0/manual/cmake-variables.7.html) –

cevap

1

CMake ile gerekli kütüphaneleri target_link_libraries komutunu kullanarak ayarlanır. Genellikle OpenGL geliştirme ve kitaplık dosyalarının yerlerini toplamak ve target_link_libraries komutu için paket değişkenlerini kullanmak için find_package(OpenGL) kullanırsınız. Bunun gibi:

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