学习SLAM十四讲ch7的时候,在orb _cv这一步就卡住了,编译出了一堆问题,没办法生成orb_cv这个可执行文件,在网上找了一些博客,解决了一些,但还有一个报错提到的文章很少,我解决之后写下来,希望能帮到也遇到这个问题的人。
问题1:G2O版本问题
error: ‘make_unique’ is not a member of ‘g2o’; did you mean ‘std::make_unique’?
这个问题主要是g2o的版本出错,不要用git上的最新版本,换成20230223版本的就行了。安装方法如下:
进入g2o官网:GitHub - RainerKuemmerle/g2o: g2o: A General Framework for Graph Optimization
按下图箭头指示打开更多发行版本,选择20230223版本,下载至电脑
下载后,提取,进入提取后的文件夹
打开终端,输入以下命令
mkdir build
cd build
cmake ..
make -j16
sudo make install
再次编译即可。
问题2:未对fmt引用
g2o版本问题解决后,再次编译,还是报错,但是没有红色的error了,全是白色字体的错误,如下:
可以看到,错误提示fmt出了问题,我复制错误信息第一行,csdn查找了一下,发现是没有对fmt进行引用,需要修改CMakeList.txt文件。
因为错误信息出现在pose_estimation_3d2d.cpp文件中,所以对CMakeList.txt中这一部分进行修改(找到这一部分,只修改这里即可)。如下:
原代码:
add_executable(pose_estimation_3d2d pose_estimation_3d2d.cpp)
target_link_libraries(pose_estimation_3d2d
g2o_core g2o_stuff
${OpenCV_LIBS})
修改后:
add_executable(pose_estimation_3d2d pose_estimation_3d2d.cpp)
target_link_libraries(pose_estimation_3d2d
g2o_core g2o_stuff
${OpenCV_LIBS} fmt)
也就是在最后括号内加上三个字母 fmt 即可。
再次make,同样的错误发生在了pose_estimation_3d3d.cpp文件下,于是对CMakeList.txt中这一部分进行修改,步骤同上:
原代码:
add_executable(pose_estimation_3d3d pose_estimation_3d3d.cpp)
target_link_libraries(pose_estimation_3d3d
g2o_core g2o_stuff
${OpenCV_LIBS})
修改后:
add_executable(pose_estimation_3d3d pose_estimation_3d3d.cpp)
target_link_libraries(pose_estimation_3d3d
g2o_core g2o_stuff
${OpenCV_LIBS} fmt)
再次make,没有错误发生。完美解决。