ubuntu22.04学习slam十四讲ch9遇到报错解决

本文详细描述了解决在使用g2o库时遇到的多个编译错误,包括make过程中关于`make_unique`的引用问题、fmt库链接、csparseundefinedreference以及string_view的引入等,提供了相应的修改方法和CMakeLists调整建议。
摘要由CSDN通过智能技术生成

问题一:make过程中报错

 error: ‘make_unique’ is not a member of ‘g2o’; did you mean ‘std::make_unique’?
  147 |         g2o::make_unique<BlockSolverType>(g2o::make_unique<LinearSolverType>()));

解决方法:将bundle_adjustment_g2o.cpp中的147行改为

std::make_unique<BlockSolverType>(std::make_unique<LinearSolverType>()));

问题2:

 解决方法:链接fmt库,在cmakelists中加入

#find_package(fmt REQUIRED)
#target_link_libraries里面加入fmt::fmt

问题3:报错信息


undefined reference to g2o::csparse::CSparse::

解决方法:参考文章SLAM学习笔记 | slambook2-CSDN博客替换CMakeList.txt中的所有内容:

cmake_minimum_required(VERSION 2.8)
 
project(bundle_adjustment)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-O3 -std=c++14")
set( CMAKE_CXX_STANDARD 14)
 
if (POLICY CMP0072)
  set(OpenGL_GL_PREFERENCE LEGACY)
endif()

Find_Package(g2o REQUIRED)
Find_Package(Ceres REQUIRED)
Find_Package(Sophus REQUIRED)
Find_Package(fmt REQUIRED)
 
# SET(G2O_LIBS g2o_csparse_extension g2o_stuff g2o_core cxsparse)
SET(G2O_LIBS g2o::g2o_ceres_ad g2o::stuff g2o::opengl_helper g2o::core 
    g2o::g2o_hierarchical_library g2o::g2o_simulator_library   
    g2o::types_slam2d g2o::types_slam2d_addons  
    g2o::solver_pcg g2o::solver_dense g2o::solver_slam2d_linear 
    g2o::solver_structure_only g2o::solver_csparse g2o::csparse_extension g2o::solver_cholmod g2o::solver_eigen 
    # g2o::csparse_extension g2o::stuff g2o::core 
    cxsparse)
 
# Eigen
include_directories("/usr/include/eigen3")
include_directories("/usr/include/suitesparse/")
add_library(bal_common common.cpp)
add_executable(bundle_adjustment_g2o bundle_adjustment_g2o.cpp)
add_executable(bundle_adjustment_ceres bundle_adjustment_ceres.cpp)
target_link_libraries(bundle_adjustment_ceres Ceres::ceres fmt::fmt bal_common)
target_link_libraries(bundle_adjustment_g2o ${G2O_LIBS} fmt::fmt bal_common)
————————————————

问题4:在改完之后make又出现一个错误 

error: ‘std::string_view’ has not been declared

解决方法:error: ‘std::string_view’ has not been declared问题解决-CSDN博客,将cmakelists中的c++14换成17

问题5:将上面都改好后make提示

 找不到 -lCeres::ceres: 没有那个文件或目录
collect2: error: ld returned 1 exit status

解决方法:上面改过的cmakelists文件中倒数第二行Ceres::ceres改为原来的

${CERES_LIBRARIES}

成功运行


问题6:运行g20代码提示:

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

解决方法:在cmakelists中find_package前加入:

list( APPEND CMAKE_MODULE_PATH /home/xqs/3rdparty/g2o/cmake_modules )
set(G2O_ROOT /usr/local/include/g2o)

然后参考https://www.cnblogs.com/dtyy/p/7881368.html,以及[学习笔记-SLAM篇]Ubuntu16.04下配置PL-SLAM(stereo)_mrpt和stvo-pl解压至pl-slam同级文件夹-CSDN博客在终端输入

cd /usr/local/lib
sudo ln -sv libg2o_csparse_extension.so libg2o_ext_csparse.so
sudo ldconfig

解决问题

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值