Обсуждение: 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