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 <yud...@nag.co.uk
<mailto:yud...@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.
________________________________________________________________________
--
gmx-users mailing list gmx-users@gromacs.org
http://lists.gromacs.org/mailman/listinfo/gmx-users
Please search the archive at
http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
Please don't post (un)subscribe requests to the list. Use the
www interface or send it to gmx-users-requ...@gromacs.org.
Can't post? Read http://www.gromacs.org/Support/Mailing_Lists