X-Original-To: pgsql-general-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 9BC7C52892 for ; Thu, 21 Jul 2005 01:17:24 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 49989-07 for ; Thu, 21 Jul 2005 04:17:15 +0000 (GMT) Received: from mail.iinet.net.au (mail-05.iinet.net.au [203.59.3.37]) by svr1.postgresql.org (Postfix) with SMTP id 4504C52824 for ; Thu, 21 Jul 2005 01:17:12 -0300 (ADT) Received: (qmail 24374 invoked from network); 21 Jul 2005 04:17:11 -0000 Received: from unknown (HELO 203-206-244-182.dyn.iinet.net.au) (203.206.244.182) by mail.iinet.net.au with SMTP; 21 Jul 2005 04:17:02 -0000 Subject: Re: [SQL] dynamically loaded functions From: Neil Dugan To: pgsql-general@postgresql.org In-Reply-To: <42D54E31.1040508@acm.org> References: <42D33601.5080605@acm.org> <20050713020847.GA87716@winnie.fuhr.org> <42D54E31.1040508@acm.org> Content-Type: text/plain Date: Thu, 21 Jul 2005 14:16:32 +1000 Message-Id: <1121919392.6566.8.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.0.4 (2.0.4-4) Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.183 tagged_above=0 required=5 tests=AWL X-Spam-Level: X-Archive-Number: 200507/843 X-Sequence-Number: 80941 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. > > >