1 |
Thanks for taking the time to explain. |
2 |
|
3 |
--- Vladimir |
4 |
|
5 |
On Wed, 2006-11-08 at 18:47 -0700, Richard Fish wrote: |
6 |
> On 11/8/06, Vladimir G. Ivanovic <vgivanovic@×××××××.net> wrote: |
7 |
> > On Wed, 2006-11-08 at 10:04 -0700, Richard Fish wrote: |
8 |
> > > On 11/8/06, Vladimir G. Ivanovic <vgivanovic@×××××××.net> wrote: |
9 |
> > > > Both parrot-0.4.6 & openoffice-2.0.4 (on AMD64) fail to run because they |
10 |
> > > > are linked to *.so.34 versions of libraries in dev-libs/icu-3.4.1. The |
11 |
> > > > current version is 3.6 with *.so.36 libraries. |
12 |
> > > > |
13 |
> > > > Is this a bug? If it is a bug, is it a bug against parrot & openoffice, |
14 |
> > > > icu or portage? |
15 |
> > > |
16 |
> > > No, not a bug. This is quite normal when updating libraries on gentoo |
17 |
> > > that some applications end up with broken dependencies. You should |
18 |
> > > usually follow world updates with revdep-rebuild to ensure that any |
19 |
> > > broken library dependencies get rebuilt. |
20 |
> > |
21 |
> > Hmmm, I thought that portage handled dependencies automatically. |
22 |
> |
23 |
> Not reverse library dependencies. Portage handles the case where you |
24 |
> install pkg a that depends on libraries from pkg b. It does not |
25 |
> handle rebuilding a when b is updated to a new (major) version. |
26 |
> |
27 |
> It can also use slots to keep old and incompatible versions of a |
28 |
> library around...for example for gtk1 vs gtk2 apps. |
29 |
> |
30 |
> > The other thing I don't understand is why parrot and openoffice failed |
31 |
> > in the first place. Aren't they're linked against, for example, |
32 |
> > libicule.so? I thought the whole point of making libicule.so a symlink |
33 |
> > to the actual library was to allow transparent library upgrades |
34 |
> > (provided the entry points don't change). |
35 |
> |
36 |
> Key statement: "provided the entry points don't change". The standard |
37 |
> convention is to link against the major version of a library, i.e. |
38 |
> libstdc++.so.6 instead of libstdc++.so when given -lstdc++. This is |
39 |
> because the normal convention is that incompatible library versions |
40 |
> (fex, changes to a function arguments) require a change in the |
41 |
> library major number. It is not uncommon to have two major versions |
42 |
> of a library installed...you can easily have something like qt3 |
43 |
> (libqt-mt.so.3) and qt4 (libqt-mt.so.4) at the same time with some |
44 |
> applications that need one version and some that need the other. |
45 |
> |
46 |
> Minor library updates (those update the Y or Z components of |
47 |
> libfoo.so.X.Y.Z) work as you describe...allowing a transparent upgrade |
48 |
> of the library. |
49 |
> |
50 |
> BTW, this behavior is defined not by the linker itself, but by the |
51 |
> actual libraries. When creating a shared library, the developer uses |
52 |
> the -soname option to define what actual library name should be linked |
53 |
> against, rather than what was specified on the linker command line. |
54 |
> |
55 |
> Thus, the libfoo.so link usually only serves to tell the linker what |
56 |
> major library version to link with by default. |
57 |
> |
58 |
> -Richard |
59 |
-- |
60 |
Vladimir G. Ivanovic <vgivanovic@×××××××.net> |
61 |
|
62 |
-- |
63 |
gentoo-user@g.o mailing list |