[gmx-users] PGI link error: unknown switch --rpath & attempted static link of dynamic object fftw/lib/libfftw3.so

Yudong Sun yudong at nag.co.uk
Mon Nov 15 13:18:06 CET 2010


Hi,

I want to build an all static library because a job running on 
background nodes may not be able to find the dynamic libraries installed 
on the front node in my system.

My configure line for GCC is:

./configure --prefix=/path-to/gromacs_4.5.3 --enable-mpi --enable-double 
CC=cc CFLAGS=-O3 MPICC=cc

Here I use cc for both C compiler and MPI compiler because it is the 
name of the C compiler wrapper used on my system which is also 
functioning for the MPI C compiler.

The fftw library is pre-installed on my system which is managed by the 
Modules package. When loaded, the fftw module sets the environment 
variables as:

prepend-path     LD_LIBRARY_PATH /opt/fftw/3.2.2.1/lib
setenv           FFTW_POST_LINK_OPTS  -L/opt/fftw/3.2.2.1/lib 
-Wl,-rpath=/opt/fftw/3.2.2.1/lib -lfftw3 -lfftw3f
setenv           FFTW_INCLUDE_OPTS  -I/opt/fftw/3.2.2.1/include
setenv           FFTW_DIR /opt/fftw/3.2.2.1/lib
setenv           FFTW_INC /opt/fftw/3.2.2.1/include

In make, the link line causing the libfftw3 error is:

cc -DHAVE_CONFIG_H -I. -I../../src -I/usr/include/libxml2 
-I../../include 
-DGMXLIBDIR=\"/usr/local/packages/nag/GROMACS/phase2b_4.5.3/share/top\" 
   -O3 -MT grompp.o -MD -MP -MF .deps/grompp.Tpo -c -o grompp.o grompp.c
mv -f .deps/grompp.Tpo .deps/grompp.Po
/bin/sh ../../libtool --tag=CC   --mode=link cc  -O3   -o grompp 
grompp.o libgmxpreprocess_mpi_d.la  ../mdlib/libmd_mpi_d.la 
../gmxlib/libgmx_mpi_d.la  -lnsl -lm
cc -O3 -o grompp grompp.o  ./.libs/libgmxpreprocess_mpi_d.a 
/usr/local/packages/nag/GROMACS/gromacs-4.5.3/src/mdlib/.libs/libmd_mpi_d.a 
../mdlib/.libs/libmd_mpi_d.a /opt/fftw/3.2.2.1/lib/libfftw3.so 
/usr/lib64/libxml2.so -lz 
/usr/local/packages/nag/GROMACS/gromacs-4.5.3/src/gmxlib/.libs/libgmx_mpi_d.a 
../gmxlib/.libs/libgmx_mpi_d.a -ldl -lnsl -lm   -Wl,--rpath 
-Wl,/opt/fftw/3.2.2.1/lib -Wl,--rpath -Wl,/opt/fftw/3.2.2.1/lib
/opt/cray/xt-asyncpe/3.7.24/bin/cc: INFO: linux target is being used
/usr/bin/ld: attempted static link of dynamic object 
`/opt/fftw/3.2.2.1/lib/libfftw3.so'
collect2: ld returned 1 exit status

GCC doesn't support the -rpath flag but it seems not a problem here.

The fftw library has the static and dynamic libraries provided. The 
linker picks the libfftw3.so. This may be relevant to the specification 
in the libfftw3.la:

# libfftw3.la - a libtool library file
# Generated by ltmain.sh (GNU libtool) 2.2.6 Debian-2.2.6a-4
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# The name that we can dlopen(3).
dlname='libfftw3.so.3'

# Names of this library.
library_names='libfftw3.so.3.2.4 libfftw3.so.3 libfftw3.so'

# The name of the static archive.
old_library='libfftw3.a'
# Linker flags that can not go in dependency_libs.
inherited_linker_flags=' -pthread'

# Libraries that this one depends upon.
dependency_libs=' -lm'

# Names of additional weak libraries provided by this library
weak_library_names=''

# Version information for libfftw3.
current=5
age=2
revision=4

# Is this an already installed library?
installed=yes

# Should we warn about portability when linking against -modules?
shouldnotlink=no

# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''

# Directory that this library needs to be installed in:
libdir='/opt/fftw/3.2.2.1/lib'


Is there any workaround to instruct the linker to use the static libfftw3.a?

Thanks,

Yudong

Roland Schulz wrote, On 12/11/2010 18:53:
> Little bit more background/context would help.
>
> Do you try to compile an all static library? If so you of course need a
> static library of fftw. If it is not all static it normally should
> accept the dynamic fftw. Then please give us the full configure line,
> the gcc command line of the link step and the full error message.
>
> Roland
>
> On Fri, Nov 12, 2010 at 12:17 PM, Yudong Sun <yudong at nag.co.uk
> <mailto:yudong at nag.co.uk>> wrote:
>
>     Mark Abraham wrote, On 12/11/2010 17:02:
>
>         On 13/11/2010 3:15 AM, Yudong Sun wrote:
>
>             Hi,
>
>             I have some troubles when compiling GROMACS 4.5.3 using PGI
>             compiler
>             on the -rpath flag and also a static link to dynamic
>             libfftw3.so.
>
>             I use the pre-installed FFTW 3.2.2.1 library on my Linux
>             system. The
>             FFTW library is managed by the Modules package. The fftw module
>             automatically sets the environ variable as:
>
>             FFTW_POST_LINK_OPTS = -L/opt/fftw/3.2.2.1/lib
>             <http://3.2.2.1/lib>
>             -Wl,-rpath=/opt/fftw/3.2.2.1/lib <http://3.2.2.1/lib>
>             -lfftw3 -lfftw3f
>
>
>         So how does configure use this information? (hint: providing the
>         configure command line is essential for us to understand any
>         context!)
>
>
>             When compiling, an error occurs on the -rpath:
>
>             pgcc -fast -o grompp grompp.o ./.libs/libgmxpreprocess_mpi_d.a
>             /usr/local/packages/nag/GROMACS/gromacs-4.5.3/src/mdlib/.libs/libmd_mpi_d.a
>             ../mdlib/.libs/libmd_mpi_d.a
>             /opt/fftw/3.2.2.1/lib/libfftw3.so
>             <http://3.2.2.1/lib/libfftw3.so>
>             /usr/local/packages/nag/GROMACS/gromacs-4.5.3/src/gmxlib/.libs/libgmx_mpi_d.a
>             ../gmxlib/.libs/libgmx_mpi_d.a -ldl -lnsl -lm --rpath
>             /opt/fftw/3.2.2.1/lib <http://3.2.2.1/lib> --rpath
>             /opt/fftw/3.2.2.1/lib <http://3.2.2.1/lib>
>             pgcc-Error-Unknown switch: --rpath
>             pgcc-Error-Unknown switch: --rpath
>
>             Pgcc doesn't recognize --rpath. The correct format is a
>             single dash
>             only -rpath.
>
>
>         Sounds like configure isn't handling pgcc properly. However,
>         GROMACS is
>         using very vanilla autoconf stuff, so I'm strongly of the
>         opinion that
>         the problem isn't on the GROMACS side.
>
>
>             If I manually remove the extra '-' (-rpath
>             /opt/fftw/3.2.2.1/lib <http://3.2.2.1/lib>) and
>             rerun the command line, a link error appears:
>
>             /usr/bin/ld: attempted static link of dynamic object
>             `/opt/fftw/3.2.2.1/lib/libfftw3.so
>             <http://3.2.2.1/lib/libfftw3.so>'
>
>             The command line links the dynamic fftw library. As the
>             'configure
>             --help' shows the default is a static build. Why doesn't the
>             configure
>             pick the libfftw3.a but the libfftw3.so? The fftw library on
>             my system
>             contains both static and dynamic libraries.
>
>
>         Don't know. Ask the autoconf list.
>
>
>             I have also tried to make the old GROMACS 4.0.7 which has
>             shown the
>             same problems as above.
>
>             Any workarounds to the problems or what options should I
>             pass to the
>             configure?
>
>
>         Don't bother with PGI compilers. GROMACS performance is 99%
>         compiler-independent, thanks to hand-coded assembly for the
>         inner loops.
>         Use gcc.
>
>
>     I have tried GCC. It has the same static link problem:
>
>
>     attempted static link of dynamic object
>     `/opt/fftw/3.2.2.1/lib/libfftw3.so <http://3.2.2.1/lib/libfftw3.so>'
>
>     Yudong
>
>         Mark
>

________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 
________________________________________________________________________



More information about the gromacs.org_gmx-users mailing list