Many thanks to everyone who helped so far especially Todd Vierling for
the RTFF.  I think I am closer but I still have a problem.  Here is the
rule in my makefile now.
.o.so:   ld -shared -L${PGDIR}/lib --export-dynamic -rpath ${PGDIR}/lib \           -lpq -lc -o $@ $<
ldd now shows this.
glaccount.so:        -lpq => /usr/pgsql/lib/libpq.so        -lc.12 => /usr/lib/libc.so.12
I then went into the PostgreSQL code and added a dlerror() call to the
error message after dlopen().  I still get an error but now I get a little
more information.
ERROR:  Load of file /usr/pgsql/modules/glaccount.so failed: dlopen (/usr/pgsql/modules/glaccount.so) failed
(/usr/pgsql/modules/glaccount.so:Undefined symbol "CurrentMemoryContext" (reloc type = 6, symnum = 6))
 
CurrentMemoryContext is defined in the postmaster (I checked with nm) which
is the program doing the dlopen.  Here is the relevant line from nm.
08138544 D CurrentMemoryContext
So it looks like everything should be working but it doesn't.  Is this
possibly a case of bogus error message or am I misunderstanding it?  Is
ELF fully baked or do I need to revert to a pre-ELF system?
Hmm.  I just noticed that nm is an old binary and that it doesn't build
from current sources due to a missing bfd.h.  Is nm like ldconfig and
not needed any more on ELF systems or is there just a problem with
the current sources?
-- 
D'Arcy J.M. Cain <darcy@{druid|vex}.net>   |  Democracy is three wolves
http://www.druid.net/darcy/                |  and a sheep voting on
+1 416 424 2871     (DoD#0082)    (eNTP)   |  what's for dinner.