I am somewhat new to PGI and working on a R build using the compiler. During the first step of the compile (blas), I am having the following problem linking. Am I missing any PGI specific libraries that I need to link against? Any hints are appreciated.
make[4]: Entering directory /apps/build/R-3.3.2/src/extra/blas' pgf77 -mp -fpic -g -c blas.f -o blas.o pgf77 -mp -fpic -g -c cmplxblas.f -o cmplxblas.o pgcc -L/apps/software/pgi-16.9/bzip2/1.0.6/lib -L/apps/software/pgi-16.9/xz/5.2.2/lib -L/apps/software/pgi-16.9/pcre/8.39/lib -L/apps/software/pgi-16.9/curl/7.51.0/lib -mp -L/apps/software/pgi-16.9/bzip2/1.0.6/lib -L/apps/software/pgi-16.9/xz/5.2.2/lib -L/apps/software/pgi-16.9/pcre/8.39/lib -L/apps/software/pgi-16.9/curl/7.51.0/lib -o libRblas.so blas.o cmplxblas.o -lpgftnrtl -lpgmp -lnuma -lpthread -lnspgc -lpgc -lrt -lm /usr/lib64/crt1.o: In function
start’:
(.text+0x20): undefined reference to main' blas.o: In function
dgbmv’:
/apps/build/R-3.3.2/src/extra/blas/./blas.f:357: undefined reference to xerbla_' blas.o: In function
dgemm_‘:
/apps/build/R-3.3.2/src/extra/blas/./blas.f:682: undefined reference to xerbla_' blas.o: In function
dgemv_’:
/apps/build/R-3.3.2/src/extra/blas/./blas.f:940: undefined reference to xerbla_' blas.o: In function
dger_‘:
/apps/build/R-3.3.2/src/extra/blas/./blas.f:1171: undefined reference to xerbla_' blas.o: In function
dsbmv_’:
/apps/build/R-3.3.2/src/extra/blas/./blas.f:1800: undefined reference to xerbla_' blas.o:/apps/build/R-3.3.2/src/extra/blas/./blas.f:2183: more undefined references to
xerbla_’ follow
make[4]: *** [libRblas.so] Error 2
Hi Michael,
BLAS has dependencies to the LAPACK library, which is where “xerbla” is defined. You will need to add you’re own Lapack library to your link, or use the one we ship by adding “-llapack”.
Hope this helps,
Mat
Mat,
Thank you for the support. I have tried that and got the following error.
pgcc -L/apps/compilers/pgi/linux86-64/16.9/lib -mp -L/apps/software/gcc-4.9.4/zlib/1.2.8/lib -L/apps/software/gcc-4.9.4/bzip2/1.0.6/lib -L/apps/software/gcc-4.9.4/xz/5.2.2/lib -L/apps/software/gcc-4.9.4/pcre/8.39/lib -L/apps/software/gcc-4.9.4/curl/7.51.0/lib -L/apps/compilers/pgi/linux86-64/16.9/lib -o libRblas.so blas.o cmplxblas.o -lpgftnrtl -lpgmp -lnuma -lpthread -lnspgc -lpgc -lrt -lm -llapack
/apps/default/bin/ld: blas.o: undefined reference to symbol ‘xerbla_’
/apps/compilers/pgi/linux86-64/16.9/lib/libblas.so.0: error adding symbols: DSO missing from command line
make[4]: *** [libRblas.so] Error 2
Does this mean that the libraries are in the wrong order for dependencies?
Mike
Compiling the sources -fPIC was correct, but creating the library
required you link with -shared switch set - otherwise you are trying
to create a executable.
We build from blas from netlib.org, which has many source files, in fortran.
If you are trying to build a shared library libblas.so, try
pgcc -shared -o libRblas.so blas.o cmplxblas.o -pgf77libs
liblapack has dependencies found in libblas, not the other way around.
If you are linking the lapack routines that you call from a
fortran program foo.f, for example, you would
pgfortran -o foo foo.f -llapack -lblas
Note: we recommend pgfortran instead of pgf77 for most compiles,
especially if you intend to use OpenACC or CUDA Fortran.
so above would be
pgfortran -o libRblas.so -fPIC blas.f cmplxblas.f -shared