[gmx-developers] nonPIC code in liblammpio.a
lindahl at sbc.su.se
Mon Nov 21 19:29:03 CET 2005
On Nov 21, 2005, at 4:23 PM, Jack Howarth wrote:
> In creating the latest fink packaging for lam 7.1.1 and gromacs/
> gromacs-mpi 3.3 for fink on MacOS X, I noticed that the lam build
> creates a liblammpio.a with common symbols because it is built without
> -fPIC. This liblammpio.a is silently linked in to gromacs-mpi's
> shared libraries by mpicc which seems a direct violation of Ulrich
> Drepper's recommendations for building DSO's...
We rely completely on GNU libtool to abstract away the mess with
shared libraries on different architectures.
We never ever set any flags ourselves - GNU libtool builds separate
object files with/without PIC code as needed (with flags depending on
the compiler), and creates the necessary libraries.
This sounds either like something in the LAM-MPI package, or a bug on
> The most important recommendation is to always use -fpic or -fPIC
> when generating code which ends up in DSOs. This applies to data as
> well as code. Code which is not compiled this way almost certainly
> will contain text relocations. For these there is no excuse. Text
> relocations require extra work to apply in the dynamic linker. And
> argumentation saying that the code is not shared because no other
> process uses the DSO is invalid. In this case it is not useful to
> use a DSO in the first place; the code should just be added to the
> application code.
Agreed, but if we start adding flags in Gromacs to fix it we would
end up replicating all of libtool. I actually wrote the Fortran77
libtool support several years ago, and after that experience I try to
stay away from the gory details of it...
Remember there are dozens of possible OS/CPU/compiler combinations
that people use for Gromacs, and on some there is a slight
performance hit with PIC.
> I also noticed that on Fedora Core 4, they have added -fPIC to
> the RPM_OPT_FLAGS for x86_64 suggesting that this has in fact
> caused problems. What are the views of the gromacs developers
> on this? To be safe shouldn't all arch's that build shared lib
> lam and gromacs, use PIC code for liblammpio.a to be safe? I
> know from working on linuxppc development that the non-PIC
> code in shared libs can cause weird crashes that are hard to
> diagnose. Thanks in advance for any advice.
Our policy is to leave that to GNU libtool and not worry about
it :-) However, on Linux it shouldn't cause any major performance
concerns, so you are more than welcome to force it for fink packages!
Erik Lindahl <lindahl at sbc.su.se>
Assistant Professor, Stockholm Bioinformatics Center
Stockholm University, SE 106 91 Stockholm
Phone: +46 8 5537 8564 Fax: +46 8 5537 8214
More information about the gromacs.org_gmx-developers