Unable to install CBLAS on Ubuntu
I am trying to install CBLAS on Ubuntu, and am, as far as I can see, following the instructions in the README file that came in the folder. When I do a 'make all', I get the following errors that I just do not understand:
make[1]: Entering directory `/home/ubuntu/ernieProject_C/pascalInpaintCodes/CBLAS/t esting'
gfortran -o xscblat1 c_sblat1.o c_sblas1.o ../lib/cblas_LINUX.a ../lib/cblas_LINUX .a
../lib/cblas_LINUX.a(cblas_srotg.o): In function `cblas_srotg': cblas_srotg.c (.text+0x1): undefined reference to `srotg_'
../lib/cblas_LINUX.a(cblas_srot.o): In function `cblas_srot':cblas_srot.c:(.text+0x3b): undefined reference to `srot_'
../lib/cblas_LINUX.a(cblas_sswap.o): In function `cblas_sswap':cblas_sswap.c:(.text+0x21): undefined reference to `sswap_'
../lib/cblas_LINUX.a(cblas_sscal.o): In function `cblas_sscal':cblas_sscal.c:(.text+0x25): undefined reference to `sscal_'
../lib/cblas_LINUX.a(cblas_scopy.o): In function `cblas_scopy':cblas_scopy.c:(.text+0x21): undefined reference to `scopy_'
../lib/cblas_LINUX.a(cblas_saxpy.o): In function `cblas_saxpy':cblas_saxpy.c:(.text+0x2f): undefined reference to `saxpy_'
../lib/cblas_LINUX.a(sdotsub.o): In function `sdotsub_':sdotsub.f:(.text+0x7): undefined reference to `sdot_'
../lib/cblas_LINUX.a(snrm2sub.o): In function `snrm2sub_':snrm2sub.f:(.text+0x7): undefined reference to `snrm2_'
../lib/cblas_LINUX.a(sasumsub.o): In function `sasumsub_':sasumsub.f:(.text+0x7): undefined reference to `sasum_'
../lib/cblas_LINUX.a(isamaxsub.o): In function `isamaxsub_':isamaxsub.f:(.text+0x7): undefined reference to `isamax_'
../lib/cblas_LINUX.a(scasumsub.o): In function `scasumsub_':scasumsub.f:(.text+0x7): undefined reference to `scasum_'
../lib/cblas_LINUX.a(scnrm2sub.o): In function `scnrm2sub_':scnrm2sub.f:(.text+0x7): undefined reference to `scnrm2_'
collect2: ld returned 1 exit status
make[1]: *** [xscblat1] Error 1
make[1]: Leaving directory `/home/ubuntu/ernieProject_C/pascalInpaintCodes/CBLAS/te sting'
make: *** [alltst] Error 2Here is the Makefile.in. I modified it a teeny bit, as per instructions. Here it is:
#
# Makefile.LINUX
#
#
# If you compile, change the name to Makefile.in.
#
#
#-----------------------------------------------------------------------------
# Shell
#-----------------------------------------------------------------------------
SHELL = /bin/sh
#-----------------------------------------------------------------------------
# Platform
#-----------------------------------------------------------------------------
PLAT = LINUX
#-----------------------------------------------------------------------------
# Libraries and includes
#-----------------------------------------------------------------------------
BLLIB = ../lib/cblas_LINUX.a
CBLIB = ../lib/cblas_$(PLAT).a
#-----------------------------------------------------------------------------
# Compilers
#-----------------------------------------------------------------------------
CC = gcc
FC = gfortran
LOADER = $(FC)
#-----------------------------------------------------------------------------
# Flags for Compilers
#-----------------------------------------------------------------------------
CFLAGS = -O3 -DADD_
FFLAGS = -O3
#-----------------------------------------------------------------------------
# Archive programs and flags
#-----------------------------------------------------------------------------
ARCH = ar
ARCHFLAGS = cr
RANLIB = ranlibThe line I modified here was
BLLIB = ../lib/cblas_LINUX.aI just changed the path. And now there IS a cblas_LINUX.a in ../lib, so that is, I think, correct.
Please, any pointers to why I am getting these errors would be really helpful. Isn't CBLAS supposed to be self-contained? Why does it even show such undefined references?
Thank you for reading and for any suggestions!
3 Answers
The recommended method is to install CBLAS as part of lapack, ATLAS or OpenBLAS. For complete instructions you may see here
You need to first install BLAS either by
sudo apt-get install libblas-devor by compiling the original implementation:1.1. download latest version of the BLAS from
1.2. unarchive and go to the folder in the terminal and run make
1.3. look for the file named
blas_LINUX.aand save the address to this filecompile the netlib cblas:
2.1. download CBLAS from the same page
2.2. unarchive
2.3. open the file Makefile.in
2.4. look for the line
BLLIB = .../blas_LINUX.a2.5. put the address you had in step one here
2.6. go to the terminal in unzipped cblas folder and run make
look for the cblas.h file in the include folder and when you want to compile link gcc against this folder
Instructions from here. If looking CBLAS examples you may check here.
Change your variable BLLIB to the location of your dynamic lapack library.
In case you are not aware of it, you can find out by using the following commands:
locate liblapackIf you have installed it properly, you should find it in
/usr/lib/liblapack.a
/usr/lib/liblapack.soSo make the following changes,
BLLIB=/usr/lib/Then you can execute the following set of commands to compile.
rm Makefile.in
ln -s Makefile.LINUX Makefile.in
make allRespond if you were able to compile it successfully.
I tried the above method as well, and thought I was close to being successful, but ultimately couldn't get the program to recognize that I had installed CBLAS.
I eventually came across the comment to this question, which led me to the solution that immediately worked for me, to just install it from a pre-existing package.
sudo apt install libopenblas-devI hope you still find this answer useful 8 years after you asked the question.