我有一个项目,它拥有和使用G2O库,它运行在两个平台(win/Unix)上。
(窗口已通过/ UNIX崩溃)
我们可以在这两个平台上看到以下几行:
g2o::SparseOptimizer optimizer;
g2o::BlockSolver_6_3::LinearSolverType * linearSolver;
linearSolver = new g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>();
下一步,在window os中,我们有以下内容:
g2o::BlockSolver_6_3 * solver_ptr = new g2o::BlockSolver_6_3(linearSolver);
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(solver_ptr);
但是Unix系统不能编译这些行,因为它说
my_file_G2o.cpp: *在成员函数'int Refiner_G2O::refinePose中( cv::Mat&,const std::vector >&,const std::Refiner_G2O::refinePose&,const cv::Mat&,float,my_file_G2o.cpp ->不匹配调用G2O//G2O/core/block_Solver.h:199:0文件中的^,G2o/include/g2o/core/block_solver.hpp:40:1:注:候选人:有性状的 g2o::BlockSolver::BlockSolver(std::unique_ptr) = g2o::BlockSolverTraits<6,3>;类型名称特征::LinearSolverType= g2o::LinearSolver > BlockSolver::BlockSolver(std::unique_ptr linearSolver)
当我看到这些错误时,我用这个新块完成了Unix代码。
auto solver_ptr = g2o::make_unique<g2o::BlockSolver_6_3>(linearSolver); // [SEGFAULT LINE]
auto solver = g2o::make_unique<g2o::OptimizationAlgorithmLevenberg>(solver_ptr);
optimizer.setAlgorithm(solver.get());
所以现在,我可以构建/运行,但是我遇到了一个SEGFAULT行标记的分段错误。
编辑:在逐步调试和调试构建之后,我有一些新闻信息:
g2o::SparseOptimizer optimizer; // debug says: "optimize: g2o::SparseOptimize
g2o::BlockSolver_6_3::LinearSolverType * linearSolver = NULL; // debug says : linearSolver: NULL
linearSolver = new g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>(); // debug says: linear solver: 0x7fe39cba9140
if (linearSolver == NULL) // debug says : not null.
exit (84);
auto solver_ptr = g2o::make_unique<g2o::BlockSolver< g2o::BlockSolver_6_3 >>(linearSolver);
// DEBUG -->,在这里,用"step in“he to this”/usr/include/c+6/bit/move.h“,在ligne 48中我们可以看到这个函数:
`template<typename T, typename ...ArgTs>
std::unique_ptr<T> make_unique(ArgTs&& ...args) //DEBUG says: args#0:
-var-create: unable to create variable object.
{
return std::unique_ptr<T>(g2o::make_unique<T>(std::forward<ArgTs>
(args)...));
};`
他错了是因为她有个坏的args。
我不明白,为什么?如果有人有一个想法,我想了解如何在窗口工作,而不是在Unix系统,将感觉很好,如果你帮助。
LINUX版本: Ubuntu 16.04
CMAKE版本: 3.11.4
诚挚的问候,
发布于 2018-08-03 11:48:59
已解决:
G2O优化:
g2o::SparseOptimizer optimizer;
auto linearSolver = std::make_unique<g2o::LinearSolverDense<g2o::BlockSolver_6_3::PoseMatrixType>>();
auto solver = new g2o::OptimizationAlgorithmLevenberg(std::make_unique<g2o::BlockSolver_6_3>(std::move(linearSolver)));
optimizer.setAlgorithm(solver);
MISC.H:
template<typename T, typename ...ArgTs>
std::unique_ptr<T> make_unique(ArgTs&& ...args)
{
return std::unique_ptr<T>(new T(std::forward<ArgTs>(args)...));
};
https://stackoverflow.com/questions/51636816
复制相似问题