按照视觉SLAM十四讲-第六讲中的源码编写了g2o拟合曲线的程序,系统为ubuntu18.04,
使用的g2o为直接从gihub下载到本地编译的。
报错界面如下(不知道为啥上传不了图片):
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘CurveFittingEdge::~CurveFittingEdge()’中:
main.cpp:(.text._ZN16CurveFittingEdgeD2Ev[_ZN16CurveFittingEdgeD5Ev]+0x15):对‘g2o::OptimizableGraph::Edge::~Edge()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘non-virtual thunk to CurveFittingEdge::~CurveFittingEdge()’中:
main.cpp:(.text._ZN16CurveFittingEdgeD2Ev[_ZN16CurveFittingEdgeD5Ev]+0x39):对‘g2o::OptimizableGraph::Edge::~Edge()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘CurveFittingEdge::~CurveFittingEdge()’中:
main.cpp:(.text._ZN16CurveFittingEdgeD0Ev[_ZN16CurveFittingEdgeD5Ev]+0x19):对‘g2o::OptimizableGraph::Edge::~Edge()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘non-virtual thunk to CurveFittingEdge::~CurveFittingEdge()’中:
main.cpp:(.text._ZN16CurveFittingEdgeD0Ev[_ZN16CurveFittingEdgeD5Ev]+0x4d):对‘g2o::OptimizableGraph::Edge::~Edge()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BaseUnaryEdge<1, double, CurveFittingVertex>::resize(unsigned long)’中:
main.cpp:(.text._ZN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexE6resizeEm[_ZN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexE6resizeEm]+0x1):对‘g2o::HyperGraph::Edge::resize(unsigned long)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::computeMarginals(g2o::SparseBlockMatrix<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > const&)’中:
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE]+0x16):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE]+0x3a):对‘g2o::G2OBatchStatistics::_globalStats’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE16computeMarginalsERNS_17SparseBlockMatrixIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEEEERKSt6vectorISt4pairIiiESaISC_EE]+0x44):对‘g2o::get_monotonic_time()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘non-virtual thunk to CurveFittingVertex::~CurveFittingVertex()’中:
main.cpp:(.text._ZN18CurveFittingVertexD2Ev[_ZN18CurveFittingVertexD5Ev]+0x2f):对‘g2o::OptimizableGraph::Vertex::~Vertex()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘CurveFittingVertex::~CurveFittingVertex()’中:
main.cpp:(.text._ZN18CurveFittingVertexD2Ev[_ZN18CurveFittingVertexD5Ev]+0x6e):对‘g2o::OptimizableGraph::Vertex::~Vertex()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘non-virtual thunk to CurveFittingVertex::~CurveFittingVertex()’中:
main.cpp:(.text._ZN18CurveFittingVertexD0Ev[_ZN18CurveFittingVertexD5Ev]+0x2e):对‘g2o::OptimizableGraph::Vertex::~Vertex()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘CurveFittingVertex::~CurveFittingVertex()’中:
main.cpp:(.text._ZN18CurveFittingVertexD0Ev[_ZN18CurveFittingVertexD5Ev]+0x6d):对‘g2o::OptimizableGraph::Vertex::~Vertex()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BaseUnaryEdge<1, double, CurveFittingVertex>::createVertex(int)’中:
main.cpp:(.text._ZN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexE12createVertexEi[_ZN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexE12createVertexEi]+0x20):对‘g2o::OptimizableGraph::Vertex::Vertex()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::~BlockSolver()’中:
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEED2Ev[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEED5Ev]+0x382):对‘g2o::Solver::~Solver()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::solve()’中:
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x1b):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x3e):对‘g2o::G2OBatchStatistics::_globalStats’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x4b):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x8f):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x487):对‘g2o::G2OBatchStatistics::_globalStats’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x495):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x4a5):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x4cc):对‘g2o::get_monotonic_time()’未定义的引用
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE5solveEv]+0x7a7):对‘g2o::get_monotonic_time()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::resize(int*, int, int*, int, int)’中:
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE6resizeEPiiS4_ii[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE6resizeEPiiS4_ii]+0x33):对‘g2o::Solver::resizeVector(unsigned long)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘g2o::BlockSolver<g2o::BlockSolverTraits<3, 1> >::updateStructure(std::vector<g2o::HyperGraph::Vertex*, std::allocator<g2o::HyperGraph::Vertex*> > const&, std::set<g2o::HyperGraph::Edge*, std::less<g2o::HyperGraph::Edge*>, std::allocator<g2o::HyperGraph::Edge*> > const&)’中:
main.cpp:(.text._ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE15updateStructureERKSt6vectorIPNS_10HyperGraph6VertexESaIS7_EERKSt3setIPNS5_4EdgeESt4lessISE_ESaISE_EE[_ZN3g2o11BlockSolverINS_17BlockSolverTraitsILi3ELi1EEEE15updateStructureERKSt6vectorIPNS_10HyperGraph6VertexESaIS7_EERKSt3setIPNS5_4EdgeESt4lessISE_ESaISE_EE]+0x213):对‘g2o::Solver::resizeVector(unsigned long)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:在函数‘main’中:
main.cpp:(.text.startup+0x46b):对‘g2o::Solver::Solver()’未定义的引用
main.cpp:(.text.startup+0x54a):对‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(std::unique_ptr<g2o::Solver, std::default_delete<g2o::Solver> >)’未定义的引用
main.cpp:(.text.startup+0x567):对‘g2o::SparseOptimizer::SparseOptimizer()’未定义的引用
main.cpp:(.text.startup+0x572):对‘g2o::SparseOptimizer::setAlgorithm(g2o::OptimizationAlgorithm*)’未定义的引用
main.cpp:(.text.startup+0x57f):对‘g2o::SparseOptimizer::setVerbose(bool)’未定义的引用
main.cpp:(.text.startup+0x59d):对‘g2o::OptimizableGraph::Vertex::Vertex()’未定义的引用
main.cpp:(.text.startup+0x621):对‘g2o::OptimizableGraph::Vertex::updateCache()’未定义的引用
main.cpp:(.text.startup+0x63b):对‘g2o::OptimizableGraph::addVertex(g2o::OptimizableGraph::Vertex*, g2o::HyperGraph::Data*)’未定义的引用
main.cpp:(.text.startup+0x686):对‘g2o::HyperGraph::Edge::setId(int)’未定义的引用
main.cpp:(.text.startup+0x6d0):对‘g2o::OptimizableGraph::addEdge(g2o::OptimizableGraph::Edge*)’未定义的引用
main.cpp:(.text.startup+0x70e):对‘g2o::OptimizableGraph::Edge::Edge()’未定义的引用
main.cpp:(.text.startup+0x7bc):对‘g2o::SparseOptimizer::initializeOptimization(int)’未定义的引用
main.cpp:(.text.startup+0x7cb):对‘g2o::SparseOptimizer::optimize(int, bool)’未定义的引用
main.cpp:(.text.startup+0x897):对‘g2o::SparseOptimizer::~SparseOptimizer()’未定义的引用
main.cpp:(.text.startup+0x919):对‘g2o::SparseOptimizer::~SparseOptimizer()’未定义的引用
main.cpp:(.text.startup+0x953):对‘g2o::OptimizableGraph::Edge::~Edge()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTIN3g2o15BlockSolverBaseE[_ZTIN3g2o15BlockSolverBaseE]+0x10):对‘typeinfo for g2o::Solver’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTIN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTIN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0x10):对‘typeinfo for g2o::OptimizableGraph::Vertex’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTIN3g2o8BaseEdgeILi1EdEE[_ZTIN3g2o8BaseEdgeILi1EdEE]+0x10):对‘typeinfo for g2o::OptimizableGraph::Edge’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0x30):对‘g2o::OptimizableGraph::Vertex::clone() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0x90):对‘g2o::OptimizableGraph::Vertex::getEstimateData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0xa0):对‘g2o::OptimizableGraph::Vertex::estimateDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0xa8):对‘g2o::OptimizableGraph::Vertex::getMinimalEstimateData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0xb8):对‘g2o::OptimizableGraph::Vertex::minimalEstimateDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE[_ZTVN3g2o10BaseVertexILi3EN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE]+0xf0):对‘g2o::OptimizableGraph::Vertex::updateCache()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0x30):对‘g2o::OptimizableGraph::Vertex::clone() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0x90):对‘g2o::OptimizableGraph::Vertex::getEstimateData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0xa0):对‘g2o::OptimizableGraph::Vertex::estimateDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0xa8):对‘g2o::OptimizableGraph::Vertex::getMinimalEstimateData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0xb8):对‘g2o::OptimizableGraph::Vertex::minimalEstimateDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV18CurveFittingVertex[_ZTV18CurveFittingVertex]+0xf0):对‘g2o::OptimizableGraph::Vertex::updateCache()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x28):对‘g2o::HyperGraph::Edge::resize(unsigned long)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x30):对‘g2o::OptimizableGraph::Edge::clone() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x48):对‘g2o::OptimizableGraph::Edge::setMeasurementData(double const*)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x50):对‘g2o::OptimizableGraph::Edge::getMeasurementData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x58):对‘g2o::OptimizableGraph::Edge::measurementDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0x60):对‘g2o::OptimizableGraph::Edge::setMeasurementFromState()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o8BaseEdgeILi1EdEE[_ZTVN3g2o8BaseEdgeILi1EdEE]+0xe0):对‘g2o::OptimizableGraph::Edge::resolveCaches()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0x30):对‘g2o::OptimizableGraph::Edge::clone() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0x48):对‘g2o::OptimizableGraph::Edge::setMeasurementData(double const*)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0x50):对‘g2o::OptimizableGraph::Edge::getMeasurementData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0x58):对‘g2o::OptimizableGraph::Edge::measurementDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0x60):对‘g2o::OptimizableGraph::Edge::setMeasurementFromState()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE[_ZTVN3g2o13BaseUnaryEdgeILi1Ed18CurveFittingVertexEE]+0xe0):对‘g2o::OptimizableGraph::Edge::resolveCaches()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0x30):对‘g2o::OptimizableGraph::Edge::clone() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0x48):对‘g2o::OptimizableGraph::Edge::setMeasurementData(double const*)’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0x50):对‘g2o::OptimizableGraph::Edge::getMeasurementData(double*) const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0x58):对‘g2o::OptimizableGraph::Edge::measurementDimension() const’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0x60):对‘g2o::OptimizableGraph::Edge::setMeasurementFromState()’未定义的引用
CMakeFiles/g2o_curve_fitting.dir/main.cpp.o:(.data.rel.ro._ZTV16CurveFittingEdge[_ZTV16CurveFittingEdge]+0xe0):对‘g2o::OptimizableGraph::Edge::resolveCaches()’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/g2o_curve_fitting.dir/build.make:135: recipe for target 'g2o_curve_fitting' failed
make[2]: *** [g2o_curve_fitting] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/g2o_curve_fitting.dir/all' failed
make[1]: *** [CMakeFiles/g2o_curve_fitting.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
使用的源码为:
#include <iostream>
#include <g2o/core/base_vertex.h>
#include <g2o/core/base_unary_edge.h>
#include <g2o/core/block_solver.h>
#include <g2o/core/optimization_algorithm_levenberg.h>
#include <g2o/core/optimization_algorithm_gauss_newton.h>
#include <g2o/core/optimization_algorithm_dogleg.h>
#include <g2o/solvers/dense/linear_solver_dense.h>
#include <Eigen/Core>
#include <opencv2/core/core.hpp>
#include <cmath>
#include <chrono>
using namespace std;
// The parameters of the vertex ine the curve model
class CurveFittingVertex: public g2o::BaseVertex<3, Eigen::Vector3d>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
virtual void setToOriginImpl() // reset
{
_estimate << 0,0,0;
}
virtual void oplusImpl ( const double* update) // update
{
_estimate += Eigen::Vector3d(update);
}
// Write and Read: remain void
virtual bool read( istream& in) {}
virtual bool write( ostream& out) const {}
};
// bias model , template parameters: the size of measurement , type, type of the joint vertexs
class CurveFittingEdge: public g2o::BaseUnaryEdge<1, double, CurveFittingVertex>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
CurveFittingEdge(double x) : BaseUnaryEdge(), _x(x) {}
// computing the bias of the curve model
void computeError()
{
const CurveFittingVertex* v = static_cast<const CurveFittingVertex *> (_vertices[0]);
const Eigen::Vector3d abc = v->estimate();
_error(0,0) = _measurement - std::exp( abc(0,0)*_x*_x + abc(1,0)*_x + abc(2,0) );
}
virtual bool read( istream& in ) {}
virtual bool write( ostream& out ) const {}
public:
double _x; // the value of x, while y refers to _measurement
};
int main ( int argc, char** argv )
{
aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘fill’
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:165:14: error: ‘FixedArray {aka class ceres::internal::FixedArray<double, 3>}’ has no member named ‘fill’ add_vertex.fill(0.);
这个问题有大佬遇到过吗?
这么大片的错误,怀疑是.h文件和源代码文件版本不匹配。
请问楼主解决了嘛?我也遇到同样的问题了
g2o 版本不对
可以检查一下CMakeLists里链接G2O部分,正确书写为G2O_CORE_LIBRARY而不是G2O_CORE_LIBRARIES
请问解决了吗,怎么解决的