2013-10-07 102 views
0

我試圖在C++項目中使用g2o庫。我在兩個系統C++,g2o(Graph-Framework),qcreator,對方法的未定義引用

安裝庫
  • 了OpenSuse - 通過zypper的依賴通過編譯安裝,g2o根據方向
  • Ubuntu的 - 通過apt-get的,g2o所有依賴通過編譯根據方向

我的.pro文件中包括這些,爲鏈接到。所以libaries:

INCLUDEPATH += /home/rhun/data/Coding/g2o/trunk/lib/ 
LIBS  += -L/home/rhun/data/Coding/g2o/trunk/lib/ 
LIBS += -lg2o_calibration_odom_laser 
LIBS += -lg2o_cli 
LIBS += -lg2o_core 
LIBS += -lg2o_csparse_extension 
LIBS += -lg2o_ext_freeglut_minimal 
LIBS += -lg2o_interface 
LIBS += -lg2o_parser 
LIBS += -lg2o_simulator 
LIBS += -lg2o_solver_csparse 
LIBS += -lg2o_solver_dense 
LIBS += -lg2o_solver_eigen 
LIBS += -lg2o_solver_pcg 
LIBS += -lg2o_solver_slam2d_linear 
LIBS += -lg2o_solver_structure_only 
LIBS += -lg2o_stuff 
LIBS += -lg2o_tutorial_slam2d 
LIBS += -lg2o_types_data 
LIBS += -lg2o_types_icp 
LIBS += -lg2o_types_sba 
LIBS += -lg2o_types_sclam2d 
LIBS += -lg2o_types_sim3 
LIBS += -lg2o_types_slam2d 
LIBS += -lg2o_types_slam3d 
INCLUDEPATH += /usr/include/suitesparse/ 
INCLUDEPATH += /home/rhun/data/Coding/g2o/tags/before-github-sync/ 
INCLUDEPATH += /home/rhun/data/Coding/g2o/tags/before-github-sync/EXTERNAL/eigen3/ 
INCLUDEPATH += /home/rhun/data/Coding/g2o/trunk/build/ 

當我嘗試#包括的東西,我能看到的一切下拉式菜單。

不過,我不斷收到這樣的信息:

error: undefined reference to 'g2o::SparseOptimizer::setMethod(g2o::SparseOptimizer::Method)' 

我卡在這裏小時。你能否擺脫一些光線?謝謝! :)

回答

0

好的,我下載了運輸here (http://openslam.org/g2o.html)的g2o版本,但它不適用於我。一旦我下載了版本ships through github,問題就沒有了。 github版本是最新的版本,創作者需要時也會應用補丁,這意味着在安裝過程中也不需要調整makefile。

唯一的「問題」是,這個新版本引入了一些變化,這使得一些在網上發現的例子有點過時,但沒有什麼可怕的;) (這並不難,起牀和運行,教程,新樣本,文檔和源代碼)

我將在這裏複製的g2o的Rainer Kuemmerle(作者)的答案,發現here

事實上,API改變了不少,這導致這樣的事實,即OpenSLAM的代碼案例與github上託管的當前代碼不兼容。對此我們無能爲力,添加新功能要求我們打破舊的API。 最好的辦法是修改使用g2o的代碼。 例如,必須通過設置相應的OptimizationAlgorithm來替換setMethod。