Re: Dynamic linking on AIX

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Albe Laurenz <all(at)adv(dot)magwien(dot)gv(dot)at>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: Dynamic linking on AIX
Date: 2006-09-20 02:10:31
Message-ID: 200609200210.k8K2AVZ26035@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


Great, I have added this to the bottom of the AIX FAQ. Thanks.

---------------------------------------------------------------------------

Albe Laurenz wrote:
> > I still would like to see a paragraph describing how AIX is different
> > from other platforms and what we are doing here.
>
> Ok, I'll try to sum it up:
>
> 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.
>
>
> I hope that's good enough,
> Laurenz Albe
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do not
> match

--
Bruce Momjian bruce(at)momjian(dot)us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Alvaro Herrera 2006-09-20 03:21:51 Re: [HACKERS] Patch for UUID datatype (beta)
Previous Message Gregory Stark 2006-09-20 01:55:54 Re: More doc patches