[thelist] [mod_perl/Apache::DBI] undefined symbol: PL_dowarn

Katherine Spice k.spice at acu.ac.uk
Tue Mar 20 12:50:59 CST 2001

Hi Anthony,

I took the liberty of asking my boyfriend to have a look at this (he's
much better @ things like this than me.....mind you he's been doing it
for years!) and I've enclosed his response.

> Syntax error on line 1226 of /web/apache/conf/httpd.conf:
> Can't load '/usr/lib/perl5/site_perl/5.005/i686-linux/auto/DBI/DBI.so'
>          for module DBI:
>          /usr/lib/perl5/site_perl/5.005/i686-linux/auto/DBI/DBI.so:
>          undefined symbol: PL_dowarn at
>          /usr/lib/perl5/5.00502/i686-linux/DynaLoader.pm line 168.
>          at /usr/lib/perl5/site_perl/5.005/i686-linux/DBI.pm line 182
>          BEGIN failed--compilation aborted at
>          /usr/lib/perl5/site_perl/5.005/i686-linux/DBI.pm line 182.
>          BEGIN failed--compilation aborted at
>          /usr/lib/perl5/site_perl/5.005/Apache/DBI.pm line 4.
> What other info might anyone need to help me solve this? Recommendations
> and ideas appreciated.

Hmm, well. From my reading, this means that while the Perl interpreter
was compiling DBI.pm, it attempted to load the DBI.so module via the
Perl dynaloader, and failed due to a symbol mismatch. The reason for
this is harder to elucidate - could be a problem with the modules, or
could be with the perl binary... When you compiled the mod_perl so, did
you have the same version of perl installed that you do currently? If
you upgraded your perl after compiling mod_perl, that may well be the
cause of your problems. I'd suggest it may be worthwhile recompiling the
Dynaloader and DBI modules. Others have suggested problems with the
ld.so.conf, but I can't believe this is the case - this file represents
the directories that should be searched for system shared objects, and
the perl Dynaloader module does not use it, AFAIK. If you attempt to
rebuild the DBI and Dynaloader modules through the CPAN interface (perl
-MCPAN -e shell), you'll probably end up building Perl 5.6, which may
not be a bad move anyway, but can be a painful process if you're not
used to it. Doing this would require a recompile of Apache.

 From personal experience, I'd suggest compiling Apache with mod_perl
from source, and I'd also suggest that you compile the mod_perl
functionality in as a static module, not as a shared object - you'll
have a much easier life this way. One of the main reasons for using
mod_perl is performance, and you're doing yourself no favours in this
regard by requiring the mod_perl module to be demand loaded - this will,
I suspect, provide little compelling advantage over a straight CGI

Good luck, and HTH,


If you feel like embarking on his suggestions or want to carry this
discussion on - mail me off list and I'll pass you his email address.


More information about the thelist mailing list