1 |
Hi, |
2 |
|
3 |
(sorry for that long mail - yes, this topic is complex) |
4 |
|
5 |
First to say: The "native" style of shared libraries on AIX is to pack |
6 |
some "shared object" into an "archive library" [1]. |
7 |
|
8 |
[1] http://www.ibm.com/developerworks/aix/library/au-gnu.html#N101D9 |
9 |
|
10 |
Using this style, it is possible to have something like what is called |
11 |
'soname' in most ELF systems. |
12 |
|
13 |
Currently, most packages create such native style shared libs on AIX in |
14 |
prefix, while some (system-) packages do not (ncurses, readline, zlib, |
15 |
bzip2, libperl/perl, openssl, apr/apr-util/subversion, ...). |
16 |
|
17 |
< the most important in this mail > |
18 |
|
19 |
Unfortunately there is no way (currently?) for that system |
20 |
packages to _switch_ from linux- to aix-style shared libs on an |
21 |
_existing_ AIX EPREFIX for various reasons. |
22 |
|
23 |
</ the most important in this mail > |
24 |
|
25 |
Well, AIX (since AIX 4.2) _can_ use 'libX.so', when using linker flag |
26 |
'-brtl' (feature called "runtime linking")[1], but then there is no such |
27 |
'soname'-like mechanism, which is a real issue when it comes to major |
28 |
gcc upgrades, as we will need to provide gcc libs in a standard location |
29 |
because of minor gcc upgrades [2]. |
30 |
|
31 |
[2] http://archives.gentoo.org/gentoo-alt/msg_4284d1915556e743727e7621f13ef5b9.xml |
32 |
http://thread.gmane.org/gmane.linux.gentoo.alt/3430 |
33 |
|
34 |
Thus gcc provides its "shared object" named "libstdc++.so.6" packed into |
35 |
the "archive library" named "libstdc++.a" on AIX. |
36 |
As suggested on gcc platform specific site[3], when upgrading from old |
37 |
gcc, one (human, package managers) can extract "libstdc++.so.5" from old |
38 |
"libstdc++.a", give it the F_LOADONLY flag, and pack it into the new |
39 |
"libstdc++.a", to keep binaries built with old gcc still running, |
40 |
because they have recorded to load "libstdc++.so.5" from "libstdc++.a", |
41 |
while linking new binaries ignore "libstdc++.so.5" (because of the |
42 |
F_LOADONLY flag) and link against "libstdc++.so.6". |
43 |
|
44 |
[3] http://gcc.gnu.org/install/specific.html#x-ibm-aix |
45 |
|
46 |
OTOH, we eventually want runtime linking like known from linux and other |
47 |
System-V *nices[1]. I've seen somewhere (can't remember exactly), that |
48 |
gcc's exception handling works better with runtime linking enabled in |
49 |
some corner cases. So the ld-wrapper used in prefix currently enables |
50 |
'-brtl' internally, but this may change in the future... |
51 |
|
52 |
But now, why do packages not create shared library in "native" style ? |
53 |
|
54 |
Thing is, *libtool* _does_ create "native" style aix shared libraries |
55 |
(provided that shared libraries are to be created at all) when there is |
56 |
_no_ "-brtl" or "-Wl,-brtl" found in LDFLAGS. libtool does not build the |
57 |
static objects then, because having both static and shared objects of |
58 |
the same sourcecode in the archive library is a bad idea. I've |
59 |
experienced that shared object won't be used when there is a static |
60 |
object providing the required symbols in the same archive library - but |
61 |
don't trust me on this one. |
62 |
|
63 |
And yes, gcc uses libtool to create its libraries. |
64 |
|
65 |
Now, the packages _not_ using libtool mostly create lib.so.1.2.3 along |
66 |
with the symlinks libX.so.1 and libX.so, as they do on linux. |
67 |
These packages need to be fixed/ported. |
68 |
|
69 |
Additionally, there are some packages putting "-brtl" or "-Wl,-brtl" |
70 |
into LDFLAGS, resulting in libtool also creating libX.so.1.2.3 with |
71 |
symlinks. The easiest way here eventually is to have libtool ignoring |
72 |
-brtl in LDFLAGS for whether to create aix style shared libs. |
73 |
|
74 |
Will create a tracker bug on this issue. |
75 |
|
76 |
/haubi/ |
77 |
-- |
78 |
Michael Haubenwallner |
79 |
Gentoo on a different level |
80 |
|
81 |
-- |
82 |
gentoo-alt@l.g.o mailing list |