diff options
Diffstat (limited to 'doc/FAQ_AIX')
-rw-r--r-- | doc/FAQ_AIX | 111 |
1 files changed, 110 insertions, 1 deletions
diff --git a/doc/FAQ_AIX b/doc/FAQ_AIX index dd2ce3053da..36fab80972a 100644 --- a/doc/FAQ_AIX +++ b/doc/FAQ_AIX @@ -1,5 +1,5 @@ From: Zeugswetter Andreas <ZeugswetterA@spardat.at> -$Date: 2006/05/19 03:57:17 $ +$Date: 2006/10/10 00:29:13 $ 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 @@ -365,3 +365,112 @@ References and resources IBM Redbook http://www.redbooks.ibm.com/redbooks/pdfs/sg245674.pdf http://www.redbooks.ibm.com/abstracts/sg245674.html?Open + + +Statistics Collector Fun on AIX +-------------------------------- + +When implementing PostgreSQL version 8.1 on AIX 5.3, we periodically +ran into problems where the statistics collector would "mysteriously" +not come up successfully. + +This appears to be the result of unexpected behaviour in the IPv6 +implementation. It looks like PostgreSQL and IPv6 do not play very +well together at this time on AIX. + +Any of the following actions "fix" the problem. + +1. Delete the localhost ipv6 address + +(as root) +# ifconfig lo0 inet6 ::1/0 delete + +2. Remove IPv6 from net services. The file /etc/netsvc.conf, on AIX, +is roughly equivalent to /etc/nsswitch.conf on Solaris/Linux. + +The default, on AIX, is thus: + + hosts=local,bind + +Replace this with: + + hosts=local4,bind4 + +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 + |