Обсуждение: Shared lib grief with 6.4.2

Поиск
Список
Период
Сортировка

Shared lib grief with 6.4.2

От
Matthew Hagerty
Дата:
Greetings,

I'm trying to create a simple function for postgres-6.4.2 under
FreeBSD-3.1-RELEASE and GCC-2.7.2.1.  This is the program code, simply
converts a bool to int4:

#include "../include/postgres.h"

int4
bool2int(bool bCondition)
{      if (bCondition)       return(1);   else       return(0);
}

Then on the command line to create the shared lib and a file command to
ensure I created a shared lib:

# gcc -shared -I../include -o procs.so bool2int.c
# file procs.so
procs.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD),
not stripped

Then in psql:

=> create function bool2int(bool) returns int4 as
'/usr/local/pgsql/procs/procs.so' language 'c';
CREATE
=> select bool2int(1=1);
ERROR:  Can't find function bool2int in file /usr/local/pgsql/procs/procs.so
=> 

Any insight as to why this does not work would be greatly appreciated.

Thank you,
Matthew Hagerty



Re: [INTERFACES] Shared lib grief with 6.4.2

От
Jonathan Davis
Дата:
Matthew Hagerty wrote:

> Greetings,
>
> I'm trying to create a simple function for postgres-6.4.2 under
> FreeBSD-3.1-RELEASE and GCC-2.7.2.1.  This is the program code, simply
> converts a bool to int4:
>
> #include "../include/postgres.h"
>
> int4
> bool2int(bool bCondition)
> {
>     if (bCondition)
>         return(1);
>     else
>         return(0);
> }
>
> Then on the command line to create the shared lib and a file command to
> ensure I created a shared lib:
>
> # gcc -shared -I../include -o procs.so bool2int.c
> # file procs.so
> procs.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD),
> not stripped
>
> Then in psql:
>
> => create function bool2int(bool) returns int4 as
> '/usr/local/pgsql/procs/procs.so' language 'c';
> CREATE
> => select bool2int(1=1);
> ERROR:  Can't find function bool2int in file /usr/local/pgsql/procs/procs.so
> =>
>
> Any insight as to why this does not work would be greatly appreciated.
>
> Thank you,
> Matthew Hagerty

I do the same thing, and  in psql:

postgres=> select bool2int(1=1);
assertion "u.hdr.e_phentsize == sizeof(Elf_Phdr)" failed: file
"/usr/src/libexec/rtld-elf/map_object.c", line 118
pqReadData() -- backend closed the channel unexpectedly.       This probably means the backend terminated abnormally
beforeor while
 
processing the request.
We have lost the connection to the backend, so further processing is
impossible.  Terminating.

to create the shared lib:

gcc -I../include -I../backend   -O2 -m486 -pipe  -Wall -Wmissing-prototypes
-I../interfaces/libpq -I../../include   -c bool2int.c -o bool2int.o
bool2int.c:6: warning: no previous prototype for `bool2int'
ld -x -r -o bool2int.o.obj bool2int.o
building shared object bool2int.so
ranlib bool2int.so.pic
ld -x -Bshareable -o bool2int.so bool2int.so.pic

I use  FreeBSD-3.1           PostgreSQL-6.4.2



Re: [INTERFACES] Shared lib grief with 6.4.2

От
Oleg Bartunov
Дата:
Look at ports information ! There are several patches and I used
some of them, actually for Makefile.shlib and makefiles/freebsd.
Everything works fine now. BTW, these patches are incorporated now
to 6.5 sources.
Oleg

On Wed, 26 May 1999, Jonathan Davis wrote:

> Date: Wed, 26 May 1999 10:46:25 +0000
> From: Jonathan Davis <haj@idianet.net>
> To: Matthew Hagerty <matthew@venux.net>
> Cc: pgsql-interfaces@postgresql.org
> Subject: Re: [INTERFACES] Shared lib grief with 6.4.2
> 
> Matthew Hagerty wrote:
> 
> > Greetings,
> >
> > I'm trying to create a simple function for postgres-6.4.2 under
> > FreeBSD-3.1-RELEASE and GCC-2.7.2.1.  This is the program code, simply
> > converts a bool to int4:
> >
> > #include "../include/postgres.h"
> >
> > int4
> > bool2int(bool bCondition)
> > {
> >     if (bCondition)
> >         return(1);
> >     else
> >         return(0);
> > }
> >
> > Then on the command line to create the shared lib and a file command to
> > ensure I created a shared lib:
> >
> > # gcc -shared -I../include -o procs.so bool2int.c
> > # file procs.so
> > procs.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD),
> > not stripped
> >
> > Then in psql:
> >
> > => create function bool2int(bool) returns int4 as
> > '/usr/local/pgsql/procs/procs.so' language 'c';
> > CREATE
> > => select bool2int(1=1);
> > ERROR:  Can't find function bool2int in file /usr/local/pgsql/procs/procs.so
> > =>
> >
> > Any insight as to why this does not work would be greatly appreciated.
> >
> > Thank you,
> > Matthew Hagerty
> 
> I do the same thing, and  in psql:
> 
> postgres=> select bool2int(1=1);
> assertion "u.hdr.e_phentsize == sizeof(Elf_Phdr)" failed: file
> "/usr/src/libexec/rtld-elf/map_object.c", line 118
> pqReadData() -- backend closed the channel unexpectedly.
>         This probably means the backend terminated abnormally before or while
> processing the request.
> We have lost the connection to the backend, so further processing is
> impossible.  Terminating.
> 
> to create the shared lib:
> 
> gcc -I../include -I../backend   -O2 -m486 -pipe  -Wall -Wmissing-prototypes
> -I../interfaces/libpq -I../../include   -c bool2int.c -o bool2int.o
> bool2int.c:6: warning: no previous prototype for `bool2int'
> ld -x -r -o bool2int.o.obj bool2int.o
> building shared object bool2int.so
> ranlib bool2int.so.pic
> ld -x -Bshareable -o bool2int.so bool2int.so.pic
> 
> I use  FreeBSD-3.1
>             PostgreSQL-6.4.2
> 
> 

_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83