[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