I modified the Makefile a bit and it all works now:
MODULES = foo
MODULE_big = bar
OBJS = bar.o foo.so
EXTENSION = foo bar
One thing that's still a bit confusing, though ... I build the extensions in my own home dir, which results in the rpath getting set like this: -Wl,-rpath,'/vol/data/home/sscheck/sandbox/postgresql-9.2.4-build/lib'
But I do "make install" from the same directory, but logged in as the postgres user under which I run my server(s). Does the rpath get embedded into the .so's? If so I don't see why it works, but it does...
Thanks!
-Steve
On Thu, Jun 13, 2013 at 7:38 AM, Tom Lane <tgl@xxxxxxxxxxxxx> wrote:
Stephen Scheck <singularsyntax@xxxxxxxxx> writes:So you're missing any reference to foo.so; not surprising it fails.
> [postgres@dev1 lib]$ ldd bar.so
> linux-vdso.so.1 => (0x00007fff1c7ff000)
> libc.so.6 => /lib64/libc.so.6 (0x00007fa4c96ac000)
> /lib64/ld-linux-x86-64.so.2 (0x00007fa4c9c5d000)
You need to make sure that "-lfoo" or something similar gets into the
link command for bar.so. You might still have some rpath issues after
that, but right now the runtime linker doesn't even know it should be
loading foo.so.
Oh, you're trying to build two separate shlibs in one Makefile? I don't
> After digging into the PGXS docs a bit more, I think if I change the
> Makefile a bit this may work:
> MODULES = foo bar
> MODULE_big = bar
> OBJS = bar.o
> SHLIB_LINK = foo.o
think that our Makefile infrastructure is smart enough to handle that,
at least not if cross-references are required. You'd probably be well
advised to split them into two separate source-code directories.
Another question worth asking yourself, if you are building like this,
is why you're bothering with two .so's at all. Is there a strong reason
not to just make them into one library?
regards, tom lane