Sullivan
Sullivan

Reputation: 471

scipy gives undefined symbol: clapack_sgesv

I want to have a clean start so I've compiled my own copies of the latest ATLAS, Lapack, and Python 2.7.3.

I've installed numpy and it recoginizes the BLAS from ATLAS and the following works ...

  python
  import numpy
  numpy.test()

But scipy is not so easy!

$ python
Python 2.7.3 (default, Jan 14 2013, 13:13:35)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy.linalg
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/__init__.py", line 133, in <module>
    from basic import *
  File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/basic.py", line 12, in <module>
    from lapack import get_lapack_funcs
  File "/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/lapack.py", line 15, in <module>
    from scipy.linalg import clapack
ImportError: /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/clapack.so: undefined symbol:
+clapack_sgesv

$ which python
/projects/nrel/cid/ladab/pkgi/bin/python

$ ldd /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg/clapack.so
        linux-vdso.so.1 =>  (0x00007fff57bff000)
        libgfortran.so.3 => /usr/lib64/libgfortran.so.3 (0x00007f9229192000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f9228ef4000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9228cde000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f922894b000)
        /lib64/ld-linux-x86-64.so.2 (0x000000387dc00000)

$ cat scipy-0.11.0/site.cfg
[DEFAULT]
library_dirs = /projects/nrel/cid/ladab/pkgi/lib
include_dirs = /projects/nrel/cid/ladab/pkgi/include
[blas_opt]
libraries = f77blas, cblas, atlas
[lapack_opt]
libraries = lapack, f77blas, cblas, atlas

$ env | egrep python
PYTHONPATH=/projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages

Searching for a definition of clapack_sgesv, I find none in the site-packages/scipy:

$ cd /projects/nrel/cid/ladab/pkgi/lib/python2.7/site-packages/scipy/linalg

$ for ii in *.so; do echo ========== $ii; nm $ii | egrep clapack_sgesv
> done
========== atlas_version.so
========== calc_lwork.so
========== cblas.so
========== clapack.so
                 U clapack_sgesv
00000000002103e0 d doc_f2py_rout_clapack_sgesv
0000000000009810 t f2py_rout_clapack_sgesv
========== fblas.so
========== flapack.so
========== _flinalg.so

It is apparently available at the LD_LIBRARY_PATH, but scipy isn't using it ...

$ echo $LD_LIBRARY_PATH
/projects/nrel/cid/ladab/pkgi/lib:/usr/lib64

$ cd /projects/nrel/cid/ladab/pkgi/lib

$ for ii in *.so; do echo ========== $ii; nm $ii | egrep clapack_sgesv; done
========== libsatlas.so
0000000000094ce0 T clapack_sgesv
========== libtatlas.so
00000000000accb0 T clapack_sgesv

Do you have any suggestions?

Upvotes: 0

Views: 3028

Answers (2)

Mike S
Mike S

Reputation: 11

I got this problem after an upgrade from Ubuntu 12.04 to 12.10. The problem was that I had two versions of scipy installed in /usr/local/lib/python2.7/dist-packages. To fix the problem I did:

 sudo apt-get remove python-scipy
 sudo rm -fr /usr/local/lib/python2.7/dist-packages/scipy*
 sudo apt-get install python-scipy

Upvotes: 0

Sullivan
Sullivan

Reputation: 471

Many thanks for the comment by Adam Cadien ... the section in http://www.scipy.org/Installing_SciPy/Linux on "Building everything from source with gfortran on Ubuntu (Nov 2010)" still works well.

Upvotes: 1

Related Questions