Edwinem / ceres_python_bindings

Python Bindings for the Ceres library using Pybind11.
170 stars 24 forks source link

Build alongside fails #20

Open GuillaumeLaine opened 1 year ago

GuillaumeLaine commented 1 year ago

I've followed the build alongside instructions, but when I run make I get a lot of errors (mostly std errors).

Building without the ceres_python_bindings folder in my ceres-solver folder results in a successful build.

I've also tried build separately and link to Ceres (which builds without errors, both for cmake and pip) but then I get the import errors mentioned in other issues (undefined symbol: cholmod_solve).

Any advice?

[ 27%] Building CXX object CMakeFiles/PyCeres.dir/ceres_python_bindings/python_bindings/python_module.cpp.o
In file included from /home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/parameter_dims.h:37,
                 from /home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/autodiff.h:150,
                 from /home/laine/Ceres/ceres-solver-2.1.0/include/ceres/autodiff_cost_function.h:130,
                 from /home/laine/Ceres/ceres-solver-2.1.0/include/ceres/ceres.h:37,
                 from /home/laine/Ceres/ceres-solver-2.1.0/ceres_python_bindings/python_bindings/python_module.cpp:30:
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:67:21: error: ‘integer_sequence’ is not a member of ‘std’
   67 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:67:21: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:67:46: error: wrong number of template arguments (3, should be 1)
   67 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                                              ^~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:63:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   63 | struct SumImpl;
      |        ^~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:67:49: error: expected unqualified-id before ‘>’ token
   67 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                                                 ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:74:21: error: ‘integer_sequence’ is not a member of ‘std’
   74 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:74:21: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:74:51: error: wrong number of template arguments (4, should be 1)
   74 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                                                   ^~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:63:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   63 | struct SumImpl;
      |        ^~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:74:54: error: expected unqualified-id before ‘>’ token
   74 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                                                      ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:81:21: error: ‘integer_sequence’ is not a member of ‘std’
   81 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:81:21: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:81:59: error: wrong number of template arguments (6, should be 1)
   81 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                                                           ^~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:63:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   63 | struct SumImpl;
      |        ^~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:81:62: error: expected unqualified-id before ‘>’ token
   81 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                                                              ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:88:21: error: ‘integer_sequence’ is not a member of ‘std’
   88 | struct SumImpl<std::integer_sequence<T, N>> {
      |                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:88:21: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:88:41: error: wrong number of template arguments (2, should be 1)
   88 | struct SumImpl<std::integer_sequence<T, N>> {
      |                                         ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:63:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   63 | struct SumImpl;
      |        ^~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:88:42: error: expected unqualified-id before ‘>’ token
   88 | struct SumImpl<std::integer_sequence<T, N>> {
      |                                          ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:94:21: error: ‘integer_sequence’ is not a member of ‘std’
   94 | struct SumImpl<std::integer_sequence<T>> {
      |                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:94:21: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:94:38: error: template argument 1 is invalid
   94 | struct SumImpl<std::integer_sequence<T>> {
      |                                      ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:94:39: error: expected unqualified-id before ‘>’ token
   94 | struct SumImpl<std::integer_sequence<T>> {
      |                                       ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:138:31: error: ‘integer_sequence’ is not a member of ‘std’
  138 |                          std::integer_sequence<T, N, Ns...>,
      |                               ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:138:31: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:138:59: error: template argument 3 is invalid
  138 |                          std::integer_sequence<T, N, Ns...>,
      |                                                           ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:138:59: error: type/value mismatch at argument 4 in template parameter list for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:138:59: note:   expected a type, got ‘N’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:149:39: error: ‘integer_sequence’ is not a member of ‘std’
  149 | struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
      |                                       ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:149:39: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:149:57: error: wrong number of template arguments (3, should be 4)
  149 | struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
      |                                                         ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:133:8: note: provided for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
  133 | struct ExclusiveScanImpl;
      |        ^~~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:163:53: error: ‘integer_sequence’ is not a member of ‘std’
  163 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                                                     ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:163:53: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:163:70: error: template argument 4 is invalid
  163 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                                                                      ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:163:16: error: expected nested-name-specifier
  163 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:181:29: error: ‘integer_sequence’ is not a member of ‘std’
  181 |                        std::integer_sequence<T, Values...>,
      |                             ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:181:29: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:181:58: error: template argument 3 is invalid
  181 |                        std::integer_sequence<T, Values...>,
      |                                                          ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:181:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, T ValueToRemove, class ... Sequence> struct ceres::internal::RemoveValueImpl’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:181:58: note:   expected a type, got ‘Values ...’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:190:29: error: ‘integer_sequence’ is not a member of ‘std’
  190 |                        std::integer_sequence<T, Head...>,
      |                             ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:190:29: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:190:56: error: template argument 3 is invalid
  190 |                        std::integer_sequence<T, Head...>,
      |                                                        ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:190:56: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, T ValueToRemove, class ... Sequence> struct ceres::internal::RemoveValueImpl’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:190:56: note:   expected a type, got ‘Head ...’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:201:29: error: ‘integer_sequence’ is not a member of ‘std’
  201 |                        std::integer_sequence<T, Head...>,
      |                             ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:201:29: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:201:56: error: template argument 3 is invalid
  201 |                        std::integer_sequence<T, Head...>,
      |                                                        ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:201:56: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, T ValueToRemove, class ... Sequence> struct ceres::internal::RemoveValueImpl’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:201:56: note:   expected a type, got ‘Head ...’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:47: error: ‘integer_sequence’ is not a member of ‘std’
  210 | struct RemoveValueImpl<T, ValueToRemove, std::integer_sequence<T, Tail...>>
      |                                               ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:47: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:71: error: template argument 3 is invalid
  210 | struct RemoveValueImpl<T, ValueToRemove, std::integer_sequence<T, Tail...>>
      |                                                                       ^~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:71: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, T ValueToRemove, class ... Sequence> struct ceres::internal::RemoveValueImpl’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:71: note:   expected a type, got ‘Tail ...’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:210:74: error: expected unqualified-id before ‘>’ token
  210 | struct RemoveValueImpl<T, ValueToRemove, std::integer_sequence<T, Tail...>>
      |                                                                          ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:25: error: ‘integer_sequence’ is not a member of ‘std’
  246 | struct AreAllEqual<std::integer_sequence<T, Value>> : std::true_type {};
      |                         ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:25: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:45: error: template argument 1 is invalid
  246 | struct AreAllEqual<std::integer_sequence<T, Value>> : std::true_type {};
      |                                             ^~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:45: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:45: note:   expected a type, got ‘Value’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:246:50: error: expected unqualified-id before ‘>’ token
  246 | struct AreAllEqual<std::integer_sequence<T, Value>> : std::true_type {};
      |                                                  ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:25: error: ‘integer_sequence’ is not a member of ‘std’
  250 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2>>
      |                         ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:25: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:53: error: template argument 1 is invalid
  250 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2>>
      |                                                     ^~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:53: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:53: note:   expected a type, got ‘Value1’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:53: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:53: note:   expected a type, got ‘Value2’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:250:59: error: expected unqualified-id before ‘>’ token
  250 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2>>
      |                                                           ^~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:25: error: ‘integer_sequence’ is not a member of ‘std’
  256 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2, Values...> >
      |                         ^~~~~~~~~~~~~~~~
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:25: error: ‘integer_sequence’ is not a member of ‘std’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: error: template argument 1 is invalid
  256 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2, Values...> >
      |                                                                      ^
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: note:   expected a type, got ‘Value1’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: note:   expected a type, got ‘Value2’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: error: type/value mismatch at argument 1 in template parameter list for ‘template<class ... Sequence> struct ceres::internal::AreAllEqual’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:70: note:   expected a type, got ‘Values ...’
/home/laine/Ceres/ceres-solver-2.1.0/include/ceres/internal/integer_sequence_algorithm.h:256:72: error: expected unqualified-id before ‘>’ token
  256 | struct AreAllEqual<std::integer_sequence<T, Value1, Value2, Values...> >
      |                                                                        ^
GuillaumeLaine commented 1 year ago

I've tried again using ceres-solver-2.0.0, same procedure, and no more errors now. I guess it had to do with the ceres version? This is a bit strange since I was using ceres version 2.1.0 above which seemed to work for others. I will leave this open in case someone has some insight.

SubMishMar commented 1 year ago

Same error with ceres-solver-2.1.0

sumitsarkar1 commented 1 year ago

No error with Ceres 2.0.0