mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Add shared linking information to AIX FAQ.
Laurenz Albe
This commit is contained in:
parent
c62172100b
commit
c840db7f0d
81
doc/FAQ_AIX
81
doc/FAQ_AIX
@ -1,5 +1,5 @@
|
||||
From: Zeugswetter Andreas <ZeugswetterA@spardat.at>
|
||||
$Date: 2006/05/26 19:48:32 $
|
||||
$Date: 2006/09/20 02:10:11 $
|
||||
|
||||
On AIX 4.3.2 PostgreSQL compiled with the native IBM compiler xlc
|
||||
(vac.C 5.0.1) passes all regression tests. Other versions of OS and
|
||||
@ -396,4 +396,81 @@ Replace this with:
|
||||
|
||||
hosts=local4,bind4
|
||||
|
||||
to deactivate searching for IPv6 addresses.
|
||||
to deactivate searching for IPv6 addresses.
|
||||
|
||||
|
||||
Shared Linking
|
||||
--------------
|
||||
|
||||
Shared libraries in AIX are different from shared libraries in Linux.
|
||||
|
||||
A shared library on AIX is an 'ar' archive containing shared objects. A
|
||||
shared object is produced by the linker when invoked appropriately (e.g.
|
||||
with -G), it is what we call a shared library on Linux.
|
||||
|
||||
-> On AIX, you can do a static as well as a dynamic
|
||||
-> link against a shared library, it depends on how you
|
||||
-> invoke the linker.
|
||||
|
||||
When you link statically, the shared objects from the library are added
|
||||
to your executable as required; when you link dynamically, only
|
||||
references to the shared objects are included in the executable.
|
||||
|
||||
Consequently you do not need a separate static library on AIX if you
|
||||
have a dynamic library.
|
||||
|
||||
However, you CAN have static libraries (ar archives containing *.o
|
||||
files), and the linker will link against them. This will of course
|
||||
always be a static link.
|
||||
|
||||
When the AIX linker searches for libraries to link, it will look for a
|
||||
library libxy.a as well as for a single shared object libxy.so when you
|
||||
tell it to -lyx. When it finds both in the same directory, it will
|
||||
prefer libpq.a unless invoked with -brtl.
|
||||
|
||||
This is where the problem occurs:
|
||||
|
||||
By default, PostgreSQL will (in the Linux way) create a shared object
|
||||
libpq.so and a static library libpq.a in the same directory.
|
||||
|
||||
Up to now, since the linker was invoked without the -brtl flag, linking
|
||||
on AIX was always static, as the linker preferred libpq.a over libpq.so.
|
||||
|
||||
We could have solved the problem by linking with -brtl on AIX, but we
|
||||
chose to go a more AIX-conforming way so that third party programs
|
||||
linking against PostgreSQL libraries will not be fooled into linking
|
||||
statically by default.
|
||||
|
||||
The 'new way' on AIX is:
|
||||
- Create libxy.so.n as before from the static library
|
||||
libxy.a with the linker.
|
||||
- Remove libxy.a
|
||||
- Recreate libxy.a as a dynamic library with
|
||||
ar -cr libxy.a libxy.so.n
|
||||
- Only install libxy.a, do not install libxy.so
|
||||
|
||||
Since linking is dynamic on AIX now, we have a new problem:
|
||||
|
||||
We must make sure that the executable finds its library even if the
|
||||
library is not installed in one of the standard library paths (/usr/lib
|
||||
or /lib).
|
||||
|
||||
On Linux this is done with an RPATH, on AIX the equivalent is LIBPATH
|
||||
that can be specified at link time with -blibpath:<colon separated path>
|
||||
. If you do not specify the LIBPATH, it is automatically computed from
|
||||
the -L arguments given to the linker. The LIBPATH, when set, must
|
||||
contain ALL directories where shared libraries should be searched,
|
||||
including the standard library directories.
|
||||
|
||||
Makefile.aix has been changed to link executables with a LIBPATH that
|
||||
contains --libdir when PostgreSQL is configured with --enable-rpath (the
|
||||
default).
|
||||
|
||||
The AIX equivalent for the Linux environment variable LD_LIBRARY_PATH is
|
||||
LIBPATH.
|
||||
|
||||
The regression tests rely on LD_LIBRARY_PATH and have to be changed to
|
||||
set LIBPATH as well.
|
||||
|
||||
Laurenz Albe
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user