stas 2004/04/12 12:08:06 Modified: src/docs/1.0/guide troubleshooting.pod Changes.pod Log: 'relocation errors' or 'undefined symbol' problems Submitted by: William McKee <[EMAIL PROTECTED]> Revision Changes Path 1.27 +68 -0 modperl-docs/src/docs/1.0/guide/troubleshooting.pod Index: troubleshooting.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/troubleshooting.pod,v retrieving revision 1.26 retrieving revision 1.27 diff -u -u -r1.26 -r1.27 --- troubleshooting.pod 7 Apr 2004 17:12:53 -0000 1.26 +++ troubleshooting.pod 12 Apr 2004 19:08:06 -0000 1.27 @@ -60,6 +60,74 @@ This section talks about errors reported when you attempt to start the server. + +=head2 'relocation errors' or 'undefined symbol' + +Although the httpd executable was successfully built, you can still +have make failures. The output could include the following errors: + + relocation error: + undefined symbol: PL_dowarn + +This class of errors is often due to multiple installations of +Perl. Having F<libperl.so> in I</usr/lib/> is a great reason for lots +of obscure problems, when you have one more perl installed +elsewhere. That's why perl puts its F<libperl.so> under its private +tree (e.g., I</usr/lib/perl5/5.8.3/i686/CORE/>). But some +distributions decide to put it along with the rest of system +libraries, not expecting that users will have extra perl +installations. + +To resolve the problem you need to check what perl library the +application finds. This is easy to check with the help of C<ldd(1)>. + +If your mod_perl is statically linked with httpd, you need to check +the httpd executable whether it's linked against F<libperl.so>: + + % ldd /path/to/apache/bin/httpd + +If the output includes F<libperl.so> check that the path is to the +version of Perl you've built mod_perl with. If your httpd executable +is reported to link against the wrong F<libperl.so> file, you've found +the cause of the problem. You should either ask your distributor to +not put the perl library into the global system libs directory, or use +some other solution to force the loading of the right library, which +is usually very platform specific. For example on Linux one can +preload a specific library path using the C<LD_PRELOAD> environment +variable. So if the wanted library is located at +I</usr/lib/perl5/5.8.3/i686/CORE/libperl.so> you can make httpd use it +with: + + % LD_PRELOAD=/usr/lib/perl5/5.8.3/i686/CORE/libperl.so httpd + +for more information on Linux loader referer to the C<ld.so(8)> +C<ldconfig(8)> manpages. + +If mod_perl is built as DSO, you will need to check the mod_perl +module (and not C<httpd>) with C<ldd>. Confusingly, mod_perl 1.0 +module name is the same as of Perl: F<libperl.so>. If for example the +mod_perl module is located in I</path/to/apache/libexec/>, the command +would be: + + % ldd /path/to/apache/libexec/libperl.so + +There could be another variation of the problem where a Perl used to +build mod_perl is statically linked and again, during the build time a +wrong static archive (e.g., F</usr/lib/libperl.a>) is picked by the +linker. If Perl is statically linked, running: + + % perl -V:useshrplib + +will say: + + useshrplib='true' + +Again, the solution may vary from system to system, but moving +F</usr/lib/libperl.a> away while building mod_perl is probably the +simplest. + + + =head2 SegFaults During Startup Possible reasons and solutions: 1.40 +5 -0 modperl-docs/src/docs/1.0/guide/Changes.pod Index: Changes.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/1.0/guide/Changes.pod,v retrieving revision 1.39 retrieving revision 1.40 diff -u -u -r1.39 -r1.40 --- Changes.pod 22 Dec 2003 02:24:22 -0000 1.39 +++ Changes.pod 12 Apr 2004 19:08:06 -0000 1.40 @@ -49,6 +49,11 @@ o Note about browser not rendering immediately even under $|=1. [Lee Goddard <home (at) LeeGoddard.com>] +* troubleshooting.pod + + o 'relocation errors' or 'undefined symbol' problems [William McKee + <[EMAIL PROTECTED]>] + =head1 Jul 14 2002 ver 1.32 * snippets.pod:
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]