Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-patches by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group