问题一: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
解决问题