1

I am using the build tools provided by Rtools.

gcc version 8.3.0 x86_64-w64-mingw32 (Built by Jeronen for the R-project)

GNU ld version 2.33.1

eigen version 3.4.0

I have been testing various functions of the eigen package, and when I calculated the singular values using the BDCSVD object, the linker just hangs with full cpu usage. The following line is causing the trouble:

BDCSVD<MatrixXd> svd(m, ComputeThinU | ComputeThinV);

This line of code compiles fine. Just the particular linker does not return. I have waited a few minutes for the linker, but it just won't return.

On the other hand, when I used the latest gcc from the Windows Linux subsystem. Everything worked fine. So is this a known issue? Can it be easily fixed (but still using the build system provided by Rtools in Windows)?

PS: I have encounted this issue several times before, but the cpp files were much more complex, so I wasn't sure back then what caused the hanging linker.

Update: A code sample is provided below. I configured my Windows copy of eigen3 using the "Unix Makefiles" option, since I do not have Visual Studio and don't want to download it.

Here is the cpp file:

#include <iostream>
#include <Eigen/Dense>

using namespace std;
using namespace Eigen;

int main()
{
double data[9];
for (int i = 0; i < 9; i++)
{
    data[i] = i;
}

Map<MatrixXd> m(data, 3, 3);
BDCSVD<MatrixXd> svd(m, ComputeThinU | ComputeThinV);

auto v = svd.singularValues();

cout << "condition #: " << v.maxCoeff() / v.minCoeff() << endl;
}

I was trying to calculate the condition number of a singular matrix here.

Compiled using command line:

g++ -I"my eigen lib" t.cpp -o t.exe

where g++ comes from Rtools, "my eigen lib" is the eigen include directory, t.cpp the cpp file, and t.exe the build target.

Surprisingly or not, when I changed the algo from BDCSVD to JacobSVD, the compilation would succeed, even though BDCSVD defaults to JacobSVD for small matrices.

cc1plus and as both returned normally. ld keeps running forever, it seems.

Edits: It's been awhile, but I am still looking for an answer.

hyena
  • 318
  • 1
  • 9
  • I think `BDCSVD` is quite heavy regarding template instantiations. Did you compile with optimizations? Can you provide a minimal example and the command line you used for compiling? – chtz Jan 07 '22 at 13:57

0 Answers0