xtensor-stack / xtensor-blas

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

Unable to compile on Ubuntu #216

Closed naeemy closed 2 years ago

naeemy commented 2 years ago

Error:

/usr/bin/ld: /tmp/ccjQLckS.o: in function `int cxxlapack::gelsd<int>(int, int, int, double const*, int, double*, int, double*, double, int&, double*, int, int*)':
/app/libs/xtensor-blas/build/include/xflens/cxxlapack/interface/gelsd.tcc:101: undefined reference to `dgelsd_'
/usr/bin/ld: /tmp/ccjQLckS.o: in function `int cxxlapack::gesv<int>(int, int, double*, int, int*, double*, int)':
/app/libs/xtensor-blas/build/include/xflens/cxxlapack/interface/gesv.tcc:85: undefined reference to `dgesv_'
collect2: error: ld returned 1 exit status

OS: Ubuntu 20.04 (Docker) xtensor-blas: 0.20.0 xtensor: 0.24.0 xtl: 0.7.4 g++ version: 9.3.0

command:

g++ -Wall -static -fdiagnostics-color=always -std=c++17 \
-lblas -llapack -DHAVE_CBLAS=1 \
-I /app/libs/xtensor/build/include \
-I /app/libs/xtl/build/include \
-I /app/libs/xtensor-blas/build/include \
-v \
-g /app/main.cpp \
-o /app/dist/main.o

Please help

naeemy commented 2 years ago

Seems like the problem is about ordering of the command, -g /app/main.cpp must come before specifying installed libraries -lblas -llapack and with -static flag additional libraries must be included -lquadmath. so that working command is

g++ -Wall -static -fdiagnostics-color=always -std=c++17 \
-L/app/libs/lapack-3.10.0 \
-L/app/libs/BLAS-3.10.0 \
-I /app/libs/xtensor/build/include \
-I /app/libs/xtl/build/include \
-I /app/libs/xtensor-blas/build/include \
-g /app/main.cpp \
-llapack -lblas -DHAVE_CBLAS=1 \
-lgfortran -lquadmath \
-o /app/dist/main.o