slam14讲报错大讲堂

1.g2o链接文件找不到

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

解法:ldconfig即可

g2o error2 - Awecoder - 博客园

1.1这是一类问题,感觉提示找不到.so文件都可以尝试ldldconfig,

2.fmt没连接(unit 4)

报错

/usr/bin/ld: pose_graph_g2o_lie_algebra.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x543): undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'

解决方法下个fmt包,能apt install 最好,不然git clone。(我是git clone的),然后目标工程findpackage(fmt REQUIRED),目标文件链接fmt(target_link_library),搞定

在cmakelists文件中,有一个对是否为ubuntu20.04的判定,判定为20.04后才会链接fmt库,直接把判定条件改为if(1),即无论如何都寻找并连接fmt库.

3.sophus库报错段错误(unit 4)

具体没看懂,看懂再说

ch4/example/trajectoryError 运行可执行文件出现错误 · Issue #110 · gaoxiang12/slambook2 · GitHub

4.g2o_viewer无法正常使用

解决高翔SLAM14讲ch11中找不到g2o_viewer命令问题_努力做学霸的学渣的博客-CSDN博客

因为安装的时候有一个插件qt5没装,而cmakelists里它也没有required,因此通过编译但没安插件。

解法

sudo apt-get remove qt4-qmake
sudo apt-get install qt5-default qtcreator
sudo apt-get install libqglviewer-dev-qt5

4.1 error: expected primary-expression before ‘)’ token  (unit 6 )

最新版g2o甚至只能用c++ 17编译,且g2o::make_unique()不存在,需要改为std::make_unique() ,可能是c++17把这个函数挪到标准库了。

解法:cmakelists中编译器改为c++17;改std::make_unique() 。

注意:墙两边的解法都是说是要linux下的编译器识别不了一些符号导致的错误,需要增加template。但事实上并没有采用这种方法就解决了问题,这个究竟是做什么的还是没搞清。

5.一个诡异的错误:ch12的mono部分报错段错误

结论

update函数是bool型,但是没有返回值,虽然warning了,但是正经人谁看warning啊,然后就没注意,结果它还报个段错误,日

过程

gdb定位到epipolarSearch(cv::Mat const&, cv::Mat const&, Sophus:--Type <RET> for more, q to quit, c to continue without paging--ret
:SE3<double, 0> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, double const&, double const&, Eigen::Matrix<double, 2, 1, 0, 2, 1>&, Eigen::Matrix<double, 2, 1, 0, 2, 1>&) ()

以为是vector<eigen>没align_allocated,结果呀,哎,gdb这黑厮怎么也乱报错了,董哥说下咋回事嗷~

后面用土方法打印逼近的,然后出来了,其实好像也可以用assert的,但是不会,诶嘿~


6.c++版本更新错误

报错:error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’? 等,都是相同格式
错误原因是用c++14规则写的代码。但是指定的编译器是c++11,所以报错

报错:error: ‘slots_reference’ was not declared in this scope

各种not declare,都是需要设置编译器

解法:set(CMAKE_CXX_STANDARD 14)

ch7:引用g2o库的文件报ceres库错误

报错:/usr/bin/ld: CMakeFiles/pose_estimation_3d2d.dir/pose_estimation_3d2d.cpp.o: in function `ceres::internal::FixedArray<double, 6ul, std::allocator<double> >::operator[](unsigned long)':
/usr/local/include/ceres/internal/fixed_array.h:214: undefined reference to `google::LogMessageFatal::LogMessageFatal(char const*, int, google::CheckOpString const&)'
/usr/bin/ld: /usr/local/include/ceres/internal/fixed_array.h:214: undefined reference to `google::LogMessage::stream()'

解法:执行文件链接个glog库,没有库就安装一个,如下:

安装:

git clone https://github.com/google/glog

cd glog/cmake/

cmake .. sudo

make install

链接:

find_package(glog REQUIRED)

target_link_library(xx  glog)

ch7:莫名段错误

在运行p_3d3d时,报错double free or corruption (out);

p_3d2d的optimizer.optimize()报段错误,不知道哪里内存爆了。

初步排查判定3d3d是因为bundleadjustment函数中变量二次析构了,但是具体解决方案未知

解法:未知

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值