xtensor-stack / xtensor-blas

BLAS extension to xtensor
BSD 3-Clause "New" or "Revised" License
155 stars 52 forks source link

Failure in linking xtensor-blas with lapack/blas? #219

Open JoshuaLau0220 opened 1 year ago

JoshuaLau0220 commented 1 year ago

I'm trying to compile a program that uses xtensor-blas, when I encounter a linker error. The error message is

...
testTensor.o: In function `int cxxlapack::getrf<int>(int, int, double*, int, int*)':
/usr/local/include/xflens/cxxlapack/interface/getrf.tcc:76: undefined reference to `dgetrf_'
collect2: error: ld returned 1 exit status
...

where testTensor.o is calling auto d = xt::linalg::det(a);. I'm using lapack-3.10.1 and blas-3.10.0, and I have supplied the -lblas -llapack -DHAVE_CBLAS=1 tag to g++, as suggested by the documention. I've also tried using the alternative tag -DXTENSOR_USE_FLENS_BLAS, which results in the same error message.

Any help or suggestion is hugely appreciated. Thanks!

willamhou commented 1 year ago

I'm trying to compile a program that uses xtensor-blas, when I encounter a linker error. The error message is

...
testTensor.o: In function `int cxxlapack::getrf<int>(int, int, double*, int, int*)':
/usr/local/include/xflens/cxxlapack/interface/getrf.tcc:76: undefined reference to `dgetrf_'
collect2: error: ld returned 1 exit status
...

where testTensor.o is calling auto d = xt::linalg::det(a);. I'm using lapack-3.10.1 and blas-3.10.0, and I have supplied the -lblas -llapack -DHAVE_CBLAS=1 tag to g++, as suggested by the documention. I've also tried using the alternative tag -DXTENSOR_USE_FLENS_BLAS, which results in the same error message.

Any help or suggestion is hugely appreciated. Thanks!

Do u resolve this problem? I have the same one.

JoshuaLau0220 commented 1 year ago

@willamhou In my case (I'm on Ubuntu), I have to also supply -lgfortran after -lblas -llapack as these two libraries depends on it. But when switching to OSX, it seems like -lgfortran should NOT be supplied.

willamhou commented 1 year ago

@willamhou In my case (I'm on Ubuntu), I have to also supply -lgfortran after -lblas -llapack as these two libraries depends on it. But when switching to OSX, it seems like -lgfortran should NOT be supplied.

Thanks u for your reply. I solve this problem, add "-lcblas -lblas -llapack `-lgfortran" to complie the binary.