pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Neil Dugan <postgres@butterflystitches.com.au>
To: pgsql-general@postgresql.org
Subject: Re: [SQL] dynamically loaded functions
Date: Thu, 21 Jul 2005 14:16:32 +1000
Message-ID: <1121919392.6566.8.camel@localhost.localdomain> (raw)
In-Reply-To: <42D54E31.1040508@acm.org>
References: <42D33601.5080605@acm.org>
	<20050713020847.GA87716@winnie.fuhr.org>
	<42D54E31.1040508@acm.org>

On Wed, 2005-07-13 at 10:24 -0700, TJ O'Donnell wrote:
>  >
>  > It sounds like you need to link gnova.so against the other shared
>  > objects so the runtime linker can find them.  For examples, see the
>  > Makefiles used by contributed modules like dblink, xml2, and a few
>  > others that link against external libraries.
>  >
> That approach is working, but only after much troubles.
> I have several 3rd party libraries, some of which call each other.
> It appears I need to carefully order the libraries in the
> link step, or some needed functions do not get included in the
> final .so.
> 
> This problem used to crop up all the time way back 20 years ago
> with linkers.  I thought all this name resolution stuff was all worked
> out with modern linkers.  I'm "linking" with (linux redhat)
>   gcc -shared -o my.so my.o my2.o their.a their2.a their3.a
> When function x() in their2.a calls something in their.a
>   (or is it the other way around?)
> I get an error from postmaster that my.so cannot be loaded because
> function x cannot be found.
> If I reverse their.a their2.a in the link command, all is well.
> Note: I never use, nor even knew about the exitence of function x() - "they" do.
> 
> Any help on how to make this more pain-free?
> 
> TJ
> 

I don't know much about pgsql but I do know that when linking if module1
needs something in module2 and module2 needs something in module1 then
you can put the the same module in the library link (i.e. '-l') list
more than once.



> 
> Michael Fuhr wrote:
> > On Mon, Jul 11, 2005 at 08:16:17PM -0700, TJ O'Donnell wrote:
> > 
> >>CREATE or REPLACE FUNCTION cansmiles(varchar) RETURNS varchar
> >>   AS 'gnova', 'oe_cansmiles' LANGUAGE 'c' IMMUTABLE STRICT;
> >>requires preloading of oe_chem.so to work.
> >>
> >>Is there any way I can associate oe_cansmiles with 2 .so's without
> >>preloading?
> > 
> > 
> > It sounds like you need to link gnova.so against the other shared
> > objects so the runtime linker can find them.  For examples, see the
> > Makefiles used by contributed modules like dblink, xml2, and a few
> > others that link against external libraries.
> > 
> 





view thread (4+ messages)

Message-ID: <1121919392.6566.8.camel@localhost.localdomain>
Permalink:  ../1121919392.6566.8.camel@localhost.localdomain/
Also on:    postgresql.org/message-id/1121919392.6566.8.camel@localhost.localdomain

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: postgres@butterflystitches.com.au, pgsql-general@postgresql.org
  Subject: Re: [SQL] dynamically loaded functions
  In-Reply-To: <1121919392.6566.8.camel@localhost.localdomain>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox