Hi!
On Wed, May 13, 2009 at 03:34:17PM -0300, Joco Salvatti wrote:
>I've been working on a project to create a smaller, functional version
>of OpenBSD (50MB). One thing that I've noticed while carrying out this
>project is that there are four types of libraries, eg:
>libssl.a
>libssl.so.14.0
>libssl_p.a
>libssl_pic.a
>What I would like to know is why are there four different types of
>libraries? Since disk consumption is a
>severe constraint, I would like to know which of these are of
>paramount importance, mandatory for the proper
>system operation.
In general,
libfoo.a
Static library, normal build. Used only when you link a program
against -lfoo and you either specify static linkage or there's
no dynamic library available (or you're on an architecture that
doesn't support dynamic libraries at all).
libfoo_p.a
Static library for profiling build (used when you link a program
with -p or -pg).
libfoo_pic.a
Static library, but build from the object files that are compiled
with -fpic or -fPIC (i.e. the object files that are used to build
the dynamic library). I don't know whether that's used for linking
with -lfoo at all (or only if you specify its full pathname).
libfoo.so.x.y
Dynamic library. Used for linking with -lfoo unless one of the
others is used as described above.
*Also needed at runtime* if a program is linked against it.
If a program is linked against libfoo.so.x.y, you need
version x.z with the same x and z >= y.
So bottom line, if you don't intend to compile or (re-)link anything
on your target system, IMO you should be safe to remove the lib*.a
files. You *should* keep the lib*.so.* unless you can be sure that
you don't need any binary that is linked against that library (check
with ldd).
You can of course do test installations e.g. in a chroot environment or
in a virtual machine (e.g. qemu) or on a spare machine where it doesn't
hurt if you break things by removing too much.
Kind regards,
Hannah.