微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用boost序列化保存的加载文件出错

如何解决使用boost序列化保存的加载文件出错

我正在研究如何在android上运行ORB_SLAM2。

目前,我可以通过ORB_SLAM2扫描地图并将其保存在Android版本上。

我也确定可以将地图重新​​加载到Android版本的ORB_SLAM2。

但是我使用PC版本重新加载由Android设备保存的地图,它会崩溃,反之亦然。

错误日志与boost / save_object_data有关。

RaiseException
CxxThrowException
cv::error
cv::error
cv::Mat::setDefaultAllocator
cv::Mat::create
RegisterDebugCallback
boost::archive::detail::oserializer<boost::archive::binary_oarchive,std::map<ORB_SLAM2::KeyFrame * __ptr64,unsigned __int64,std::less<ORB_SLAM2::KeyFrame * __ptr64>,std::allocator<std::pair<ORB_SLAM2::KeyFrame * __ptr64 const,unsigned __int64> > > >::save_object_data
boost::archive::detail::oserializer<boost::archive::binary_oarchive,std::set<ORB_SLAM2::MapPoint * __ptr64,std::less<ORB_SLAM2::MapPoint * __ptr64>,std::allocator<ORB_SLAM2::MapPoint * __ptr64> > >::save_object_data
boost::archive::detail::oserializer<boost::archive::binary_oarchive,std::vector<std::list<ORB_SLAM2::KeyFrame * __ptr64,std::allocator<ORB_SLAM2::KeyFrame * __ptr64> >,std::allocator<std::list<ORB_SLAM2::KeyFrame * __ptr64,std::allocator<ORB_SLAM2::KeyFrame * __ptr64> > > > >::save_object_data
boost::archive::detail::oserializer<boost::archive::binary_oarchive,unsigned __int64> > > >::save_object_data
boost::serialization::singleton_module::get_lock
InitSlamObject

有人知道如何解决这个问题。 谢谢!!!

解决方法

默认二进制归档文件不可移植。在不同的体系结构或编译器配置上读取它们会导致未定义的行为

例如参见boost binary_oarchive works differently for different compilers用于便携式替代品

除此之外,版本控制可能是一个问题。可以实现版本控制(类版本控制和Boost库版本控制),但是如果支持不正确,则可能会失败。

此外,检查序列化代码是否正确。值得注意的是,错误似乎源自setDefaultAllocator,它是静态的:

static void cv::Mat::setDefaultAllocator    (   MatAllocator *  allocator   )

每次都调用它似乎很奇怪,尤其是在 save 操作中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?