G2O库使用,遇到的问题

第一个问题:

  Could not find a package configuration file provided by "G2O" with any of
  the following names:

    G2OConfig.cmake
    g2o-config.cmake

找不到g2o的cmake文件。

查找系统路径,在/usr/local/lib/cmake/g2o中存在g2oConfig.cmake,打印message(STATUS "CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")发现,没有上述路径。

添加set(CMAKE_PREFIX_PATH "/usr/local" ${CMAKE_PREFIX_PATH})

再次catkin发现,依然找不到。

原因很抽象:g2o编译生成的是g2oConfig.cmake,而cmake查找的是G2OConfig.cmake 

大小写不一样,在/usr/local/lib/cmake/g2o执行sudo mv g2oConfig.cmake G2OConfig.cmake 

再次catkin_make,没有这个问题。

还有另一种解决方法,直接绕过cmake搜索:

set(G2O_INCLUDE_DIRS /usr/local/include/g2o)
set(G2O_LIBRARY_DIRS /usr/local/lib)

这样catkin_make也没有问题。

第二个问题:

上述问题解决后,遇到新的问题:

/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x272): undefined reference to `g2o::SparseOptimizer::SparseOptimizer()'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x28b): undefined reference to `g2o::SparseOptimizer::setAlgorithm(g2o::OptimizationAlgorithm*)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x29f): undefined reference to `g2o::SparseOptimizer::setVerbose(bool)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x3bf): undefined reference to `g2o::HyperGraph::Edge::setId(int)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x4cd): undefined reference to `g2o::OptimizableGraph::addEdge(g2o::OptimizableGraph::Edge*)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x521): undefined reference to `g2o::SparseOptimizer::initializeOptimization(int)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x53a): undefined reference to `g2o::SparseOptimizer::optimize(int, bool)'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x667): undefined reference to `g2o::SparseOptimizer::~SparseOptimizer()'
/usr/bin/ld: g2oCurveFitting.cpp:(.text+0x722): undefined reference to `g2o::SparseOptimizer::~SparseOptimizer()'

原因是.so文件找不到       

解决方案:

target_link_libraries(g2oCurveFitting
  ${catkin_LIBRARIES}
  ${G2O_CORE_LIBRARY} 
  ${G2O_STUFF_LIBRARY}
  ${OpenCV_LIBS}
  g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension  g2o_types_sba
  )

在target_link_libraries中加上最后一行。 

然后catkin_make 完全通过。

第三个问题:

rosrun optiminize g2oCurveFitting 出现错误:

error while loading shared libraries: libg2o_core.so.0.1: cannot open shared object file: No such file or directory

解决方法:

sudo gedit /etc/ld.so.conf 

#指定动态链接器(ld.so 或 ld-linux.so)在运行时查找共享库(动态库,.so 文件)的额外目录路径

添加 /usr/local/lib

sudo ldconfig #重新生成动态链接器缓存,确保运行程序时能够找到正确的共享库。


再次执行,成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值