Bug#598638: lapack: update-alternatives breaks application linking

Francesco Poli (t1000) frx at firenze.linux.it
Thu Sep 30 17:19:57 UTC 2010


Package: lapack
Version: 3.2.1-8
Severity: normal

Hi and thanks for maintaining LAPACK in Debian!

I am trying to see how much performance I may gain with ATLAS as a
LAPACK replacement (I will also test the CPU-optimized
libatlas-core2sse3-dev later on).

I am trying to follow instructions included in
http://sylvestre.ledru.info/blog/sylvestre/2010/04/06/update_of_the_linear_algebra_libraries_i

However, it seems that I am doing something wrong, since, after changing
the alternatives, I am no longer able to compile (link, to be precise)
my applications.

Let's describe the problem.
I have just upgraded the following packages

  [INSTALL, DEPENDENCIES] libatlas-dev
  [REMOVE, DEPENDENCIES] libatlas-headers
  [UPGRADE] libatlas-base-dev 3.6.0-24 -> 3.8.3-27
  [UPGRADE] libatlas3gf-base 3.6.0-24 -> 3.8.3-27

since they have recently migrated to testing.
They automatically set the following alternatives:

  # update-alternatives --config libblas.so.3gf 
  There are 2 choices for the alternative libblas.so.3gf (providing /usr/lib/libblas.so.3gf).
  
    Selection    Path                                      Priority   Status
  ------------------------------------------------------------
  * 0            /usr/lib/atlas-base/atlas/libblas.so.3gf   35        auto mode
    1            /usr/lib/atlas-base/atlas/libblas.so.3gf   35        manual mode
    2            /usr/lib/libblas/libblas.so.3gf            10        manual mode
  
  Press enter to keep the current choice[*], or type selection number:
  # update-alternatives --config liblapack.so.3gf
  There are 2 choices for the alternative liblapack.so.3gf (providing /usr/lib/liblapack.so.3gf).
  
    Selection    Path                                        Priority   Status
  ------------------------------------------------------------
  * 0            /usr/lib/atlas-base/atlas/liblapack.so.3gf   35        auto mode
    1            /usr/lib/atlas-base/atlas/liblapack.so.3gf   35        manual mode
    2            /usr/lib/lapack/liblapack.so.3gf             10        manual mode
  
  Press enter to keep the current choice[*], or type selection number:

With these settings, I can compile (and link) programs that use LAPACK:

  $ gfortran -march=native -O3 -mcmodel=large -msse -mfpmath=sse -pipe -o test_0 test.f -llapack
  $ ldd test_0 
        linux-vdso.so.1 =>  (0x00007ffff29ff000)
        liblapack.so.3gf => /usr/lib/liblapack.so.3gf (0x00007ff0eebe5000)
        libgfortran.so.3 => /usr/lib/libgfortran.so.3 (0x00007ff0ee8f9000)
        libm.so.6 => /lib/libm.so.6 (0x00007ff0ee676000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007ff0ee460000)
        libc.so.6 => /lib/libc.so.6 (0x00007ff0ee0ff000)
        libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007ff0edbde000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007ff0ed9c2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff0ef811000)

After changing the alternatives to the reference BLAS/LAPACK implementations

  # update-alternatives --config libblas.so.3gf 
  There are 2 choices for the alternative libblas.so.3gf (providing /usr/lib/libblas.so.3gf).
  
    Selection    Path                                      Priority   Status
  ------------------------------------------------------------
  * 0            /usr/lib/atlas-base/atlas/libblas.so.3gf   35        auto mode
    1            /usr/lib/atlas-base/atlas/libblas.so.3gf   35        manual mode
    2            /usr/lib/libblas/libblas.so.3gf            10        manual mode
  
  Press enter to keep the current choice[*], or type selection number: 2
  update-alternatives: using /usr/lib/libblas/libblas.so.3gf to provide /usr/lib/libblas.so.3gf (libblas.so.3gf) in manual mode.
  # update-alternatives --config liblapack.so.3gf
  There are 2 choices for the alternative liblapack.so.3gf (providing /usr/lib/liblapack.so.3gf).
  
    Selection    Path                                        Priority   Status
  ------------------------------------------------------------
  * 0            /usr/lib/atlas-base/atlas/liblapack.so.3gf   35        auto mode
    1            /usr/lib/atlas-base/atlas/liblapack.so.3gf   35        manual mode
    2            /usr/lib/lapack/liblapack.so.3gf             10        manual mode
  
  Press enter to keep the current choice[*], or type selection number: 2
  update-alternatives: using /usr/lib/lapack/liblapack.so.3gf to provide /usr/lib/liblapack.so.3gf (liblapack.so.3gf) in manual mode.

I am no longer able to compile and link the same program:

  $ gfortran -march=native -O3 -mcmodel=large -msse -mfpmath=sse -pipe -o test_1 test.f -llapack
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_chemv'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_dptsyrk'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_sspr2'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_cmoveConj'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_cgbmv'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_sspmv'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_cpttrsm'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_cscal'
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_ctbmv'
  [...]
  /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/liblapack.so: undefined reference to `ATL_dpttrmm'
  collect2: ld returned 1 exit status

What am I failing to understand?
Is an 'lddconfig' needed, by chance?

I couldn't find documentation about the BLAS/LAPACK alternatives system
implemented in Debian packages.
Where is it explained?

Please help, thanks for your time.


-- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (800, 'testing'), (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages liblapack-dev depends on:
ii  libatlas-base-dev [libblas-3g 3.8.3-27   Automatically Tuned Linear Algebra
ii  libblas-dev [libblas-3gf.so]  1.2-7      Basic Linear Algebra Subroutines 3
ii  liblapack3gf                  3.2.1-8    library of linear algebra routines

liblapack-dev recommends no packages.

liblapack-dev suggests no packages.

-- no debconf information





More information about the debian-science-maintainers mailing list