libtool archive madness

Ralf Corsepius rc040203 at freenet.de
Thu Mar 16 13:36:23 UTC 2006


On Thu, 2006-03-16 at 06:24 -0600, Rex Dieter wrote:
> Michael Schwendt wrote:
> > On Mon, 13 Mar 2006 15:03:24 -0600, Rex Dieter wrote:
> > 
> >>> I have found the solution after a strace session.
> >>>
> >>> Don't remove the *.la files which will be installed by the make
> >>> install step into the '%install' stanza.. Both .la files, the
> >>> Kpart and the kio_slave will be needed.
> >>>
> >>> Conclussion: IN opposite to the packaging guidelines it may be
> >>> make sense to put .la files into rpms for KDE programs.
> >> If the packaging guidelines don't already say it, the omission of .la 
> >> files should be limited to shared libraries in %{_libdir}/
> > 
> > This is insufficient and creates broken inter-library dependency chains.
> > 
> > It seems that pieces within KDE still _require_ .la files to be present in
> > %{_libdir}/kde3 in order to find/load plugins. E.g. k3b needs .la files
> > for its plugins. However, these .la files contain dependencies to other
> > .la files in %_libdir. So if you don't package .la files in %_libdir, but
> > include other .la files which contain a dependency on the excluded files,
> > this breaks the dependency chain. 
> 
> Turns out that the missing dependancies of loadable modules, in 100% of
> cases that *I* have seen, is harmless.  So, I'm of the opinion that
> unless a concrete example of broken-ness (ie, an app that doesn't work
> after removing *only %_libdir/lib*.la), then I'd say don't worry about it.

The point about *.la's, you both are seem to be deliberately want to ignore:
* Many aspects about shared libraries are non-portable
* Many aspects about shared libraries are non-standardized.
* Many aspects about mixing shared/static libraries are non-portable.

What libtool tries with it's *.la's is to implement is an additional
layer (API) on top of libraries, which makes many of those aspects
portable.

As Linux is a fairly modern OS it isn't affected by most of the issues,
which affect building shared libraries on other OSes. That's why *.la's,
in the vast majority of cases are not necessary to keep Linux systems
operational and appear as "unnecessarily restrictive and disturbing".

I.e. the main purpose of *.la's is the portability related API they
implement, and the dependencies they make visible. Most of these
dependencies are dynamic under Linux ("Unnecessary"), but are static on
many other OSes.

Ralf





More information about the fedora-extras-list mailing list