gaoxiang12 / slambook

MIT License
6.88k stars 3.26k forks source link

Ceres与Eigen3.3冲突 #214

Open Frozenheart1998 opened 5 years ago

Frozenheart1998 commented 5 years ago

高博你好,我的Ubuntu上之前安装的是Eigen3.3,但是Ceres依赖于Eigen3.2而与3.3版本相冲突。请问除了降级Eigen版本还有什么方法能解决这个问题。

附cmake报错: [ 56%] Building CXX object internal/ceres/CMakeFiles/jet_test.dir/jet_test.cc.o In file included from /usr/local/include/eigen3/Eigen/Core:385:0, from /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/include/ceres/jet.h:165, from /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/internal/ceres/jet_test.cc:31: /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h: In instantiation of ‘struct Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, Eigen::Matrix<ceres::Jet<double, 2>, 2, 2>, false>’: /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h:50:1: required by substitution of ‘template<class T> const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, ceres::Jet<double, 2>, Eigen::internal::scalar_product_op<T, ceres::Jet<double, 2> > > >::value>::type, ceres::Jet<double, 2> >, const typename Eigen::internal::plain_constant_type<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1>, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, ceres::Jet<double, 2>, Eigen::internal::scalar_product_op<T, ceres::Jet<double, 2> > > >::value>::type>::type, const Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> > Eigen::operator*(const T&, const StorageBaseType&) [with T = Eigen::Matrix<ceres::Jet<double, 2>, 2, 2>]’ /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/internal/ceres/jet_test.cc:529:12: required from here /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h:76:8: error: no type named ‘Literal’ in ‘struct Eigen::NumTraits<ceres::Jet<double, 2> >’ struct promote_scalar_arg<S,T,false> : promote_scalar_arg_unsupported<S,T,typename NumTraits<S>::Literal> {}; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h: In instantiation of ‘struct Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1>, false>’: /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h:50:1: required by substitution of ‘template<class T> const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<ceres::Jet<double, 2>, T, Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, T> > >::value>::type>, const Eigen::Matrix<ceres::Jet<double, 2>, 2, 2>, const typename Eigen::internal::plain_constant_type<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2>, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<ceres::Jet<double, 2>, T, Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, T> > >::value>::type>::type> Eigen::MatrixBase<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2> >::operator*<T>(const T&) const [with T = Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1>]’ /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/internal/ceres/jet_test.cc:529:12: required from here /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h:76:8: error: no type named ‘Literal’ in ‘struct Eigen::NumTraits<ceres::Jet<double, 2> >’ /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h: In instantiation of ‘struct Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> >, false>’: /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h:50:1: required by substitution of ‘template<class T> const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, ceres::Jet<double, 2>, Eigen::internal::scalar_product_op<T, ceres::Jet<double, 2> > > >::value>::type, ceres::Jet<double, 2> >, const typename Eigen::internal::plain_constant_type<Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2> >, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, ceres::Jet<double, 2>, Eigen::internal::scalar_product_op<T, ceres::Jet<double, 2> > > >::value>::type>::type, const Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2> > > Eigen::operator*(const T&, const StorageBaseType&) [with T = Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> >]’ /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/internal/ceres/jet_test.cc:530:37: required from here /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h:76:8: error: no type named ‘Literal’ in ‘struct Eigen::NumTraits<ceres::Jet<double, 2> >’ /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h: In instantiation of ‘struct Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2> >, false>’: /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h:50:1: required by substitution of ‘template<class T> const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<ceres::Jet<double, 2>, T, Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, T> > >::value>::type>, const Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> >, const typename Eigen::internal::plain_constant_type<Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> >, typename Eigen::internal::promote_scalar_arg<ceres::Jet<double, 2>, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<ceres::Jet<double, 2>, T, Eigen::internal::scalar_product_op<ceres::Jet<double, 2>, T> > >::value>::type>::type> Eigen::MatrixBase<Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 1, 0, 2, 1> > >::operator*<T>(const T&) const [with T = Eigen::Transpose<Eigen::Matrix<ceres::Jet<double, 2>, 2, 2> >]’ /home/lincoln/Documents/slambook-master/3rdparty/ceres-solver/internal/ceres/jet_test.cc:530:37: required from here /usr/local/include/eigen3/Eigen/src/Core/util/XprHelper.h:76:8: error: no type named ‘Literal’ in ‘struct Eigen::NumTraits<ceres::Jet<double, 2> >’ internal/ceres/CMakeFiles/jet_test.dir/build.make:62: recipe for target 'internal/ceres/CMakeFiles/jet_test.dir/jet_test.cc.o' failed make[2]: *** [internal/ceres/CMakeFiles/jet_test.dir/jet_test.cc.o] Error 1 CMakeFiles/Makefile2:1042: recipe for target 'internal/ceres/CMakeFiles/jet_test.dir/all' failed make[1]: *** [internal/ceres/CMakeFiles/jet_test.dir/all] Error 2 Makefile:140: recipe for target 'all' failed make: *** [all] Error 2

xiaotaw commented 4 years ago

从官网下载最新stable版本(ceres-solver-1.14.0),编译通过。http://www.ceres-solver.org/installation.html#getting-the-source-code