前篇:ubuntu20下slambook2环境安装及问题解决
一、Eigen(ch3)
问题一:#include错误,请更新includePath
Eigen有路径问题,它被下载到"/usr/local/include/eigen3"和"/usr/include/eigen3"中,使用vsc时,会划红色波浪线--#include错误,请更新includePath
我们只需将"/usr/local/include/eigen3"中的Eigen复制到上级目录(不推荐复制"/usr/include/eigen3",因为"/usr/include/"是系统路径,让系统自己管理是最好的,详见**参考[1]**),即"/usr/include/"中即可。"eigen3"下打开终端。
sudo cp --recursive ./Eigen ..
之后的类似问题雷同。
问题二:error:‘decay_t’is not a nenber of 'std'; did you mean 'decay'?
这是CMakelists.txt有问题。原:
只需修改第四行即可,原因是当时写这个代码的库的版本太老,因此c++标准是c++11即可,而我们下的库版本太新,用到了c++新版本的东西。改:
二、Sophus(ch4)
问题一:error: ‘std::optional’ has not been declared572|std::optional<Scalar> const& theta_o = std::nullopt){
同一、Eigen问题二,改:
三、OpenCV(ch5、ch7、ch8、ch13)
ch5:
问题一: error:‘decay_t’is not a nenber of 'std'; did you mean 'decay'?
同一、Eigen问题二,改下c++标准。
ch5:
问题二:terninate called after throwing an instance of 'std ::logic_errorwhat():basic_string: :_M_construct null not valid
原因是缺少参数输入,因此只要在后面参数传入一个图像路径即可。改:
ch7:
问题一:Could not find a configuration file for package "OpenCV" that is compatiblewith requested version "3".
原因是当时编译时用的apt安装,安装的4.2,不是3.x版本。修改CMakeLists.txt,将"OpenCV 3 REQUIRED"改为"OpenCV 4 REQUIRED"。
ch7:
问题二:error:‘CV_LOAD_IMAGE_cOLOR’was not declared in this scope
原因是3和4版本的命名不同,详细看**参考[3]**,将所有.cpp文件中的这个变量改为"-1"。
ch7:
问题三:error: 'cv_FM_8POINT’ was not declared in this scope
原因同ch8_问题三,将"CV_FM_8POINT"改为"FM_8POINT"。
ch8:
问题一:error: ‘CV_GRAY2BGR’ was not declared in this scope
同上,名称问题,将"CV_GRAY2BGR"改为"cv::COLOR_GRAY2BGR"
ch13:
问题一:****error: ‘CV_FILLED’ was not declared in this scope
把"ch13/src/fronted.cpp"文件"CV_FILLED"改为"cv::FILLED"即可。
四、g2o(ch6)
问题一:error:'Pake_ unique' is not a menber of 'g2o'; did you mean ' std : :make_unique’?
c++标准已经改为17之后,报错:
看来不是c++标准的问题,根据**参考[3]**,我当前时间下的是最新的g2o(20230806_git),我决定重装为20230223_git:
卸载g2o,参考[4]。
重新编译安装:
github:20230323_git下载
我选择根据下载的g2o文档"README.md"进行编译重装。
sudo apt install libeigen3-dev libspdlog-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev-qt5
cd g2o-20230223_git
mkdir build && cd build
cmake ..
make -j8
sudo make install
编译slambook2/ch6成功!
五、CSparse(ch9)
问题一:cmake/FindcSparse.cmake:24(find_package_handle_standard_args)
问题二:bundle_adjustment_g2o.cpp:(.text+0x1961): undefined reference to `g2o::csparse::CSparse::CSparse()'
依据**参考[5]**在"ch9/CMakeLists.txt"中加入
target_link_libraries(g2o_demo ${catkin_LIBRARIES} g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension)
target_link_libraries(bundle_adjustment_g2o ${catkin_LIBRARIES} g2o_core g2o_types_slam3d g2o_solver_csparse g2o_stuff g2o_csparse_extension)
具体如图所示:
六、DBoW3(ch11)
问题一:error: ISO C++17 does not allow dynamic exception specifications
这次不要将CMakeLists.txt中的std标准改为C++17,而是改为C++14。因为动态异常规格已在C++17标准中被移除。
问题二:make[2]: *** 没有规则可制作目标“/usr/local/lib/libDBoW3.a”,由“gen_vocab” 需求。 停止。
将CMakeLists.txt中的
set( DBoW3_LIBS "/usr/local/lib/libDBoW3.a" )
改为
set( DBoW3_LIBS "/usr/local/lib/libDBoW3.so" )
因为通过
可以知道它没静态库,只有动态库了。
至此,slambook2的例程都能编译成功了。
七、参考
参考[1]:Linux笔记之本地安装(用户安装)目录和系统安装目录
参考[2]:SLAM十四讲,第七章程序ch7报错, error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
参考[3]:error: ‘make_unique’ is not a member of ‘g2o’ 的参考解决方法
参考[4]:ubuntu卸载g2o库
参考[5]:关于G2O库的坑~
版权归原作者 noob_qing 所有, 如有侵权,请联系我们删除。