Lib Version

Chalonec Roger Chalonec.Roger at pbgc.gov
Mon May 3 17:13:12 UTC 2004


Thanks...

-----Original Message-----
From: fedora-list-bounces at redhat.com
[mailto:fedora-list-bounces at redhat.com] On Behalf Of Tommy Reynolds
Sent: Friday, April 30, 2004 12:53 PM
To: For users of Fedora Core releases
Subject: Re: Lib Version


Uttered Alexander Dalloz <alexander.dalloz at uni-bielefeld.de>, spake
thus:

> Am Fr, den 30.04.2004 schrieb Tim Clarke um 17:20:
> > Alex, pardon my ignorance but how does glibc-*2.3.2 work out to be 
> > libc6?!?
> So libc.so.6 means libc6 means glibc version 6 and is packaged in the 
> glibc-2.3.2-101.4 RPM. Someone else may give you a more precise and 
> better informed answer than me.

The intent of the whole setup is to allow multiple versions of shared
libraries because an application gets built expecting a particular
version of the library, perhaps because of ABI issues.

To that end, each library includes its name builtin to the shared
library itself.  So when a program is linked against a library (-lfoo),
the linker looks into the shared library and adds its "internal" name
into the executables list of shared libraries.  If you look, you will
usually see a series of symbolic links pointing to the actual shared
library itself:

	glibc.so --> glibc-6.so
	glibc-6.1 --> glibc-6.1.2.so

It is the use of these intermediate symbolic links that makes this work.
The "glibc-6.1.2.so" library indentifies itself as "glibc-6.so", by
means of that "internal" name I mentioned.  So when the program linker
binds "glibc.so", it actually finds the library file "glibc-6.1.2.so"
whose internal name is "glibc-6.so" and that's the library name placed
in the executables list of necessary shared libraries.

Now when the application gets executed, the system first runs a
shared-program loader that ensures that all prerequisite shared
libraries are in memory.  The shared program loader (ld.so) looks in the
executables shared library table, finds "glibc-6.so" and then links the
executable to that file.

When a new version of the shared library becomes available, say
"glibc-6.1.3.so", all that is necessary is to install the new file and
change the symbolic links:

	glibc.so   --> glibc-6.so
	glibc-6.so --> glibc-6.1.3.so

and when the executable program is loaded again, the ld.so looks for
shared library file "glibc-6.so" and automatically gets the newer
version of the library.

When an interface is changed in the shared library, the new release has
a different minor number (the "1" in "glibc-6.1.3.so") the new version
is installed and the directory listing looks a bit like this:

	glibc.so   --> glibc-6.so
	glibc-6.so --> glibc-6.2.0.so
	glibc-6.1.3.so
	glibc-6.2.0.so

It's all a bit confusing but just remember there are _two_ linking times
when a shared library is used: 1) when "ld" binds the shared library to
the executable and; 2) when "ld.so" attaches the shared library to the
executable at run time.

Cheers!












More information about the fedora-list mailing list