ADBench icon indicating copy to clipboard operation
ADBench copied to clipboard

Strange Eigen compilation issue

Open athas opened this issue 5 years ago • 0 comments

After setting up cmake and running make I get strange compiler errors in gmm_eigen.h:

In file included from /home/athas/repos/ADBench/tools/Manual/gmm_d.cpp:176:
/home/athas/repos/ADBench/tools/Manual/../cpp-common/gmm_eigen.h: In function ‘void gmm_objective_no_priors(int, int, int, const Eigen::Map<const Eigen::Array<T, -1, 1> >&, const std::vector<Eigen::Map<const Eigen::Matrix<Scalar, -1, 1> > >&, ArrayX<T>&, const std::vector<Eigen::Matrix<LhsScalar, -1, -1, 0> >&, const double*, Wishart, T*)’:
/home/athas/repos/ADBench/tools/Manual/../cpp-common/gmm_eigen.h:165:68: error: expected primary-expression before ‘)’ token
         Qxcentered.noalias() = Qs[ik].triangularView<Eigen::Lower>()*xcentered;
                                                                    ^
/home/athas/repos/ADBench/tools/Manual/../cpp-common/gmm_eigen.h:174:61: error: expected primary-expression before ‘)’ token
         lse(ik) = -0.5*(Qs[ik].triangularView<Eigen::Lower>() * (curr_x - mus[ik])).squaredNorm();
                                                             ^
tools/Manual/CMakeFiles/Tools-Manual-GMM-Eigen.dir/build.make:86: recipe for target 'tools/Manual/CMakeFiles/Tools-Manual-GMM-Eigen.dir/gmm_d.cpp.o' failed
make[2]: *** [tools/Manual/CMakeFiles/Tools-Manual-GMM-Eigen.dir/gmm_d.cpp.o] Error 1
CMakeFiles/Makefile2:442: recipe for target 'tools/Manual/CMakeFiles/Tools-Manual-GMM-Eigen.dir/all' failed
make[1]: *** [tools/Manual/CMakeFiles/Tools-Manual-GMM-Eigen.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

From all the Eigen documentation I can find, this should work. It fails with both GCC 8.3 and Clang 6.0, with similar error messages.

Playing around, either of the following changes make it build:

  • Removing the template instantiation, i.e: Qs[ik].triangularView()*xcentered
  • Explicitly passing an argument of any type (!!!): Qs[ik].triangularView<Eigen::Lower>("hello")*xcentered

I think my C++ skills are too rusty to figure out how these appease the compiler spirits. I also haven't gotten to running the code yet, so it may not actually work.

athas avatar May 27 '19 19:05 athas