Thread: Bug in PL/Perl makefile
Your name : David Jack Olrik Your email address : david@olrik.dk System Configuration --------------------- Architecture (example: Intel Pentium) : Intel Pentium III Operating System (example: Linux 2.0.26 ELF) : Linux 2.2.14 ELF PostgreSQL version (example: PostgreSQL-6.5.1): PostgreSQL-7.0beta1 Compiler used (example: gcc 2.8.0) : gcc 2.95.2 Please enter a FULL description of your problem: ------------------------------------------------ pl/perl does not work. Please describe a way to repeat the problem. Please try to provide a concise reproducible example, if at all possible: ---------------------------------------------------------------------- install pl/perl and create this function: CREATE FUNCTION addints(int4, int4) RETURNS int4 AS ' return $_[0] + $_[1] ' LANGUAGE 'plperl'; Then select from it: select addints(3,4); Result: ERROR: Load of file /usr/local/pgsql/lib/plperl.so failed: /usr/local/pgsql/lib/plperl.so: undefined symbol: elog_DEBUG If you know how this problem might be fixed, list the solution below: --------------------------------------------------------------------- Missing .o file in make file. Patchfile attached with this mail fixes the problem! -- Best regards, David Jack Olrik <david@olrik.dk> http://david.olrik.dk [ Linux: Because rebooting is for adding new hardware ]
David Jack Olrik <david@olrik.dk> writes: > Missing .o file in make file. Patchfile attached with this mail fixes the > problem! David, the plperl makefile has been completely rewritten by Mark Hollomon in the last couple days. I have not had time yet to check it and commit it to CVS, but I am attaching what he sent me; would you like to try it? regards, tom lane use ExtUtils::MakeMaker; use ExtUtils::Embed; use DynaLoader; use Config; # # get the location of the Opcode module # my $opcode = ''; { $modname = 'Opcode'; my $dir; foreach (@INC) { if (-d "$_/auto/$modname") { $dir = "$_/auto/$modname"; last; } } if (defined $dir) { $opcode = DynaLoader::dl_findfile("-L$dir", $modname); } } WriteMakefile( 'NAME' => 'plperl', dynamic_lib => { 'OTHERLDFLAGS' => "$opcode -L\$(LIBPQDIR) -lpq @{[ldopts()]}" } , INC => '-I$(LIBPQDIR) -I$(SRCDIR)/include -I$(SRCDIR)/backend', XS => { 'SPI.xs' => 'SPI.c' }, OBJECT => 'plperl.o eloglvl.o SPI.o', ); sub MY::post_initialize { q[ SRCDIR=../../../src include $(SRCDIR)/Makefile.global ]; } sub MY::install { q[ install :: all cp $(INST_DYNAMIC) $(LIBDIR) ]; }
This has been fixed by the plperl maintainer. Beta tomorrow should show the new code. > Your name : David Jack Olrik > Your email address : david@olrik.dk > > System Configuration > --------------------- > Architecture (example: Intel Pentium) : Intel Pentium III > > Operating System (example: Linux 2.0.26 ELF) : Linux 2.2.14 ELF > > PostgreSQL version (example: PostgreSQL-6.5.1): PostgreSQL-7.0beta1 > > Compiler used (example: gcc 2.8.0) : gcc 2.95.2 > > > Please enter a FULL description of your problem: > ------------------------------------------------ > pl/perl does not work. > > > Please describe a way to repeat the problem. Please try to provide a > concise reproducible example, if at all possible: > ---------------------------------------------------------------------- > install pl/perl and create this function: > > CREATE FUNCTION addints(int4, int4) RETURNS int4 AS ' > return $_[0] + $_[1] > ' LANGUAGE 'plperl'; > > Then select from it: > > select addints(3,4); > > Result: > > ERROR: Load of file /usr/local/pgsql/lib/plperl.so failed: > /usr/local/pgsql/lib/plperl.so: undefined symbol: elog_DEBUG > > > If you know how this problem might be fixed, list the solution below: > --------------------------------------------------------------------- > Missing .o file in make file. Patchfile attached with this mail fixes the > problem! > > -- > Best regards, > David Jack Olrik <david@olrik.dk> http://david.olrik.dk > [ Linux: Because rebooting is for adding new hardware ] Content-Description: fix for bad makefile [Attachment, skipping...] -- Bruce Momjian | http://www.op.net/~candle pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026