你好高博
之前在slambook1里使用的是sophus的.h老版本。在Slambook2里使用的sophus是hpp版本的。这hpp版本的sophus需要更高版本的eigen3。现在我的Ubuntu16.04上安装了eigen3.2和eigen3.3两个版本,并且修改了sophus的cmakelists(set了eigen3.3的路径)使得新版本的sophus可以成功找到新版本eigen3并编译安装成功。但是在运行ch4时还是会在编译时报错:
canning dependencies of target useSophus make[3]: *** No rule to make target '/home/lincoln/Documents/Sophus/build/libSophus.so', needed by 'useSophus'. Stop. make[3]: *** Waiting for unfinished jobs.... [ 50%] Building CXX object CMakeFiles/useSophus.dir/useSophus.cpp.o In file included from /usr/local/include/sophus/so3.hpp:8:0, from /usr/local/include/sophus/se3.hpp:7, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:5: /usr/local/include/sophus/so2.hpp:101:40: error: ‘ScalarBinaryOpTraits’ in namespace ‘Eigen’ does not name a template type using ReturnScalar = typename Eigen::ScalarBinaryOpTraits< ^ /usr/local/include/sophus/so2.hpp:105:26: error: ‘ReturnScalar’ was not declared in this scope using SO2Product = SO2<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/so2.hpp:105:39: error: template argument 1 is invalid using SO2Product = SO2<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/so2.hpp:108:32: error: ‘ReturnScalar’ was not declared in this scope using PointProduct = Vector2<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/so2.hpp:108:45: error: template argument 1 is invalid using PointProduct = Vector2<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/so2.hpp:111:43: error: ‘ReturnScalar’ was not declared in this scope using HomogeneousPointProduct = Vector3<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/so2.hpp:111:56: error: template argument 1 is invalid using HomogeneousPointProduct = Vector3<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/so2.hpp:209:15: error: ‘SO2Product’ does not name a type SOPHUS_FUNC SO2Product<OtherDerived> operator*( ^ /usr/local/include/sophus/so2.hpp:244:15: error: ‘PointProduct’ does not name a type SOPHUS_FUNC PointProduct<PointDerived> operator*( ^ /usr/local/include/sophus/so2.hpp:260:15: error: ‘HomogeneousPointProduct’ does not name a type SOPHUS_FUNC HomogeneousPointProduct<HPointDerived> operator*( ^ /usr/local/include/sophus/so2.hpp:284:38: error: ‘ReturnScalar’ was not declared in this scope std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so2.hpp:284:51: error: template argument 2 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so2.hpp:284:63: error: template argument 1 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so2.hpp:284:75: error: ‘type’ in namespace ‘::’ does not name a type std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ In file included from /usr/local/include/sophus/se3.hpp:7:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:5: /usr/local/include/sophus/so3.hpp:105:40: error: ‘ScalarBinaryOpTraits’ in namespace ‘Eigen’ does not name a template type using ReturnScalar = typename Eigen::ScalarBinaryOpTraits< ^ /usr/local/include/sophus/so3.hpp:109:26: error: ‘ReturnScalar’ was not declared in this scope using SO3Product = SO3<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/so3.hpp:109:39: error: template argument 1 is invalid using SO3Product = SO3<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/so3.hpp:112:32: error: ‘ReturnScalar’ was not declared in this scope using PointProduct = Vector3<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/so3.hpp:112:45: error: template argument 1 is invalid using PointProduct = Vector3<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/so3.hpp:115:43: error: ‘ReturnScalar’ was not declared in this scope using HomogeneousPointProduct = Vector4<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/so3.hpp:115:56: error: template argument 1 is invalid using HomogeneousPointProduct = Vector4<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/so3.hpp:324:15: error: ‘SO3Product’ does not name a type SOPHUS_FUNC SO3Product<OtherDerived> operator*( ^ /usr/local/include/sophus/so3.hpp:357:15: error: ‘PointProduct’ does not name a type SOPHUS_FUNC PointProduct<PointDerived> operator*( ^ /usr/local/include/sophus/so3.hpp:372:15: error: ‘HomogeneousPointProduct’ does not name a type SOPHUS_FUNC HomogeneousPointProduct<HPointDerived> operator*( ^ /usr/local/include/sophus/so3.hpp:394:38: error: ‘ReturnScalar’ was not declared in this scope std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so3.hpp:394:51: error: template argument 2 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so3.hpp:394:63: error: template argument 1 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/so3.hpp:394:75: error: ‘type’ in namespace ‘::’ does not name a type std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ In file included from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:5:0: /usr/local/include/sophus/se3.hpp:85:40: error: ‘ScalarBinaryOpTraits’ in namespace ‘Eigen’ does not name a template type using ReturnScalar = typename Eigen::ScalarBinaryOpTraits< ^ /usr/local/include/sophus/se3.hpp:89:26: error: ‘ReturnScalar’ was not declared in this scope using SE3Product = SE3<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/se3.hpp:89:39: error: template argument 1 is invalid using SE3Product = SE3<ReturnScalar<OtherDerived>>; ^ /usr/local/include/sophus/se3.hpp:92:32: error: ‘ReturnScalar’ was not declared in this scope using PointProduct = Vector3<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/se3.hpp:92:45: error: template argument 1 is invalid using PointProduct = Vector3<ReturnScalar<PointDerived>>; ^ /usr/local/include/sophus/se3.hpp:95:43: error: ‘ReturnScalar’ was not declared in this scope using HomogeneousPointProduct = Vector4<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/se3.hpp:95:56: error: template argument 1 is invalid using HomogeneousPointProduct = Vector4<ReturnScalar<HPointDerived>>; ^ /usr/local/include/sophus/se3.hpp:308:15: error: ‘SE3Product’ does not name a type SOPHUS_FUNC SE3Product<OtherDerived> operator*( ^ /usr/local/include/sophus/se3.hpp:325:15: error: ‘PointProduct’ does not name a type SOPHUS_FUNC PointProduct<PointDerived> operator*( ^ /usr/local/include/sophus/se3.hpp:335:15: error: ‘HomogeneousPointProduct’ does not name a type SOPHUS_FUNC HomogeneousPointProduct<HPointDerived> operator*( ^ /usr/local/include/sophus/se3.hpp:359:38: error: ‘ReturnScalar’ was not declared in this scope std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/se3.hpp:359:51: error: template argument 2 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/se3.hpp:359:63: error: template argument 1 is invalid std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /usr/local/include/sophus/se3.hpp:359:75: error: ‘type’ in namespace ‘::’ does not name a type std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type> ^ /home/lincoln/Documents/slambook2/ch4/useSophus.cpp: In function ‘int main(int, char**)’: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:60: error: no match for ‘operator*’ (operand types are ‘Sophus::SO3<double>’ and ‘Sophus::SO3d {aka Sophus::SO3<double>}’) Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/sophus/se3.hpp:7:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:5: /usr/local/include/sophus/so3.hpp:385:20: note: candidate: Sophus::SO3Base<Derived>::Line Sophus::SO3Base<Derived>::operator*(const Line&) const [with Derived = Sophus::SO3<double>; Sophus::SO3Base<Derived>::Line = Eigen::ParametrizedLine<double, 3, 0>; typename Eigen::internal::traits<T>::Scalar = double] SOPHUS_FUNC Line operator*(Line const& l) const { ^ /usr/local/include/sophus/so3.hpp:385:20: note: no known conversion for argument 1 from ‘Sophus::SO3d {aka Sophus::SO3<double>}’ to ‘const Line& {aka const Eigen::ParametrizedLine<double, 3, 0>&}’ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:386:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const std::complex<_Tp>&) operator*(const complex<_Tp>& __x, const complex<_Tp>& __y) ^ /usr/include/c++/5/complex:386:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const std::complex<_Tp>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:395:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const _Tp&) operator*(const complex<_Tp>& __x, const _Tp& __y) ^ /usr/include/c++/5/complex:395:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const std::complex<_Tp>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:404:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const std::complex<_Tp>&) operator*(const _Tp& __x, const complex<_Tp>& __y) ^ /usr/include/c++/5/complex:404:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3d {aka Sophus::SO3<double>}’ is not derived from ‘const std::complex<_Tp>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Householder:24:0, from /usr/local/include/Eigen/QR:17, from /usr/local/include/Eigen/SVD:11, from /usr/local/include/Eigen/Geometry:15, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:4: /usr/local/include/Eigen/src/Householder/HouseholderSequence.h:439:99: note: candidate: template<class OtherDerived, class VectorsType, class CoeffsType, int Side> typename Eigen::internal::matrix_type_times_scalar_type<typename VectorsType::Scalar, OtherDerived>::Type Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::HouseholderSequence<VectorsType, CoeffsType, Side>&) typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,OtherDerived>::Type operator*(const MatrixBase<OtherDerived>& other, const HouseholderSequence<VectorsType,CoeffsType,Side>& h) ^ /usr/local/include/Eigen/src/Householder/HouseholderSequence.h:439:99: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:397:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/Transpositions.h:350:1: note: candidate: template<class TranspositionsDerived, class MatrixDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::TranspositionsBase<TranspositionsDerived>&, const Eigen::MatrixBase<U>&) operator*(const TranspositionsBase<TranspositionsDerived> &transpositions, ^ /usr/local/include/Eigen/src/Core/Transpositions.h:350:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const Eigen::TranspositionsBase<TranspositionsDerived>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:397:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/Transpositions.h:338:1: note: candidate: template<class MatrixDerived, class TranspositionsDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::TranspositionsBase<TranspositionsDerived>&) operator*(const MatrixBase<MatrixDerived> &matrix, ^ /usr/local/include/Eigen/src/Core/Transpositions.h:338:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:396:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/PermutationMatrix.h:558:1: note: candidate: template<class PermutationDerived, class MatrixDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::PermutationBase<PermutationDerived>&, const Eigen::MatrixBase<U>&) operator*(const PermutationBase<PermutationDerived> &permutation, ^ /usr/local/include/Eigen/src/Core/PermutationMatrix.h:558:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const Eigen::PermutationBase<PermutationDerived>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ In file included from /usr/local/include/Eigen/Core:396:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/PermutationMatrix.h:546:1: note: candidate: template<class MatrixDerived, class PermutationDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::PermutationBase<PermutationDerived>&) operator*(const MatrixBase<MatrixDerived> &matrix, ^ /usr/local/include/Eigen/src/Core/PermutationMatrix.h:546:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:35:62: note: ‘Sophus::SO3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SO3d SO3_updated = Sophus::SO3d::exp(update_so3) * SO3_R; ^ /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:60: error: no match for ‘operator*’ (operand types are ‘Sophus::SE3<double>’ and ‘Sophus::SE3d {aka Sophus::SE3<double>}’) Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:5:0: /usr/local/include/sophus/se3.hpp:350:20: note: candidate: Sophus::SE3Base<Derived>::Line Sophus::SE3Base<Derived>::operator*(const Line&) const [with Derived = Sophus::SE3<double>; Sophus::SE3Base<Derived>::Line = Eigen::ParametrizedLine<double, 3, 0>; typename Eigen::internal::traits<T>::Scalar = double] SOPHUS_FUNC Line operator*(Line const& l) const { ^ /usr/local/include/sophus/se3.hpp:350:20: note: no known conversion for argument 1 from ‘Sophus::SE3d {aka Sophus::SE3<double>}’ to ‘const Line& {aka const Eigen::ParametrizedLine<double, 3, 0>&}’ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:386:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const std::complex<_Tp>&) operator*(const complex<_Tp>& __x, const complex<_Tp>& __y) ^ /usr/include/c++/5/complex:386:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const std::complex<_Tp>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:395:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const std::complex<_Tp>&, const _Tp&) operator*(const complex<_Tp>& __x, const _Tp& __y) ^ /usr/include/c++/5/complex:395:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const std::complex<_Tp>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:70:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/include/c++/5/complex:404:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const std::complex<_Tp>&) operator*(const _Tp& __x, const complex<_Tp>& __y) ^ /usr/include/c++/5/complex:404:5: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3d {aka Sophus::SE3<double>}’ is not derived from ‘const std::complex<_Tp>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Householder:24:0, from /usr/local/include/Eigen/QR:17, from /usr/local/include/Eigen/SVD:11, from /usr/local/include/Eigen/Geometry:15, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:4: /usr/local/include/Eigen/src/Householder/HouseholderSequence.h:439:99: note: candidate: template<class OtherDerived, class VectorsType, class CoeffsType, int Side> typename Eigen::internal::matrix_type_times_scalar_type<typename VectorsType::Scalar, OtherDerived>::Type Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::HouseholderSequence<VectorsType, CoeffsType, Side>&) typename internal::matrix_type_times_scalar_type<typename VectorsType::Scalar,OtherDerived>::Type operator*(const MatrixBase<OtherDerived>& other, const HouseholderSequence<VectorsType,CoeffsType,Side>& h) ^ /usr/local/include/Eigen/src/Householder/HouseholderSequence.h:439:99: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:397:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/Transpositions.h:350:1: note: candidate: template<class TranspositionsDerived, class MatrixDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::TranspositionsBase<TranspositionsDerived>&, const Eigen::MatrixBase<U>&) operator*(const TranspositionsBase<TranspositionsDerived> &transpositions, ^ /usr/local/include/Eigen/src/Core/Transpositions.h:350:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const Eigen::TranspositionsBase<TranspositionsDerived>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:397:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/Transpositions.h:338:1: note: candidate: template<class MatrixDerived, class TranspositionsDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::TranspositionsBase<TranspositionsDerived>&) operator*(const MatrixBase<MatrixDerived> &matrix, ^ /usr/local/include/Eigen/src/Core/Transpositions.h:338:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:396:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/PermutationMatrix.h:558:1: note: candidate: template<class PermutationDerived, class MatrixDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::PermutationBase<PermutationDerived>&, const Eigen::MatrixBase<U>&) operator*(const PermutationBase<PermutationDerived> &permutation, ^ /usr/local/include/Eigen/src/Core/PermutationMatrix.h:558:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const Eigen::PermutationBase<PermutationDerived>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ In file included from /usr/local/include/Eigen/Core:396:0, from /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:3: /usr/local/include/Eigen/src/Core/PermutationMatrix.h:546:1: note: candidate: template<class MatrixDerived, class PermutationDerived> const Eigen::Product<MatrixDerived, PermutationDerived, 2> Eigen::operator*(const Eigen::MatrixBase<Derived>&, const Eigen::PermutationBase<PermutationDerived>&) operator*(const MatrixBase<MatrixDerived> &matrix, ^ /usr/local/include/Eigen/src/Core/PermutationMatrix.h:546:1: note: template argument deduction/substitution failed: /home/lincoln/Documents/slambook2/ch4/useSophus.cpp:58:62: note: ‘Sophus::SE3<double>’ is not derived from ‘const Eigen::MatrixBase<Derived>’ Sophus::SE3d SE3_updated = Sophus::SE3d::exp(update_se3) * SE3_Rt; ^ CMakeFiles/useSophus.dir/build.make:62: recipe for target 'CMakeFiles/useSophus.dir/useSophus.cpp.o' failed make[3]: *** [CMakeFiles/useSophus.dir/useSophus.cpp.o] Error 1 CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/useSophus.dir/all' failed make[2]: *** [CMakeFiles/useSophus.dir/all] Error 2 CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/useSophus.dir/rule' failed make[1]: *** [CMakeFiles/useSophus.dir/rule] Error 2 Makefile:118: recipe for target 'useSophus' failed make: *** [useSophus] Error 2
从报错内容看,ch4的useSophus虽然成功链接到sophus却并没有成功连接到eigen3.3。请问高博该如何解决这个问题