vo_slam(slam14讲13章作业编译运行)

cmake问题1

OpenCV库不要指定版本,我设备是4.2版本了,所以指定版本会出错,最最新的4.2版本就好了

# OpenCV
find_package(OpenCV 3.2 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

编译问题1

  1. 编译错误打印
    在这里插入图片描述
  2. 错误原因,Sophus版本比较新,库引用方式变了
  3. 修改方案
    在这里插入图片描述

编译问题2

  1. 编译错误
    在这里插入图片描述
  2. 错误原因是c++的标准不一致
  3. 解决办法,将ch13/CMakeLists.txt中的c++11标准改为c++ 14,如下所示:
    在这里插入图片描述

编译错误3

  1. 错误打印在这里插入图片描述
  2. 也是c++标准不一致引起的
  3. 解决办法,将ch13/CMakeLists.txt中的c++14标准改为c++17.
set(CMAKE_CXX_STANDARD 17)

编译问题4

  1. 错误打印在这里插入图片描述
  2. 修改方法:g2o::make_unique 改成 std::make_unique

运行段错误1

  1. 错误打印,通过生成core加gdb看死机栈回溯
    在这里插入图片描述
  2. 原因
    这个问题最坑,查了好久,具体原因如下:
bool Config::SetParameterFile(const std::string &filename)
	config_->file_ = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);

本意是打开config\default.yaml文件并存到config_->file_中,但是 cv::FileStorage对象不支持拷贝构造函数,config_->file_ 并没有真正赋值;所以调用 Config::Get<std::string>("dataset_dir").c_str()必然会段错误。

  1. 修改方案
    将一个cv::FileStorage对象的实例"赋值"给另一个变量,应该使用移动构造函数或移动赋值运算符,所以改成:
bool Config::SetParameterFile(const std::string &filename)
	// config_->file_ = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);
    cv::FileStorage fs = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);
    config_->file_ = std::move(fs);

这样修改依旧会出错,因为std::move(fs)只是移交权限,并不会做内存拷贝,因此当SetParameterFile函数执行完,cv::FileStorage fs = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);的空间将被释放,config_->file_ 指向的空间被释放了;所以在其他函数中调用Config::Get<std::string>("dataset_dir").c_str()必然会段错误,不想再花时间了,用了很low的方法,在cv::FileStorage fs = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);前加static定义成静态变量。

bool Config::SetParameterFile(const std::string &filename)
	// config_->file_ = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);
    static cv::FileStorage fs = cv::FileStorage(filename.c_str(), cv::FileStorage::READ);
    config_->file_ = std::move(fs);

运行段错误2

  1. 错误打印
    在这里插入图片描述
  2. 解决办法
    在这里插入图片描述
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值