Hi,
I tried rebuilding mod_perl 2.0.7 after upgrading various things, and got the
following error message when trying to start Apache:
httpd: Syntax error on line 60 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/modules/mod_perl.so into server:
dlopen(/usr/local/apache/modules/mod_perl.so, 10):
Symbol not found: _modperl_handler_name
Referenced from: /usr/local/apache/modules/mod_perl.so
Expected in: dynamic lookup
After some spelunking I found a fix: make sure the MP_INLINE isn't defined as
__inline__
#define MP_INLINE
but not really the root cause.
First, my environment:
MacOSX 10.8.2
Xcode 4.5.2 with command-line tools (I suspect the culprit may be here, but I
don't really know what I'm talking about)
Apache 2.2.23
Perl 5.16.2
mod_perl 2.0.7
apr 1.4.6
I had previously built mod_perl 2.0.7 with perl 5.16.1, Apache 2.2.22 on MacOSX
10.7.5 (and previous version of Xcode), without seeing this problem.
Here are my notes.
Given the moan about not finding modperl_handler_name, I look in mod_perl.so:
% nm mod_perl.so | grep --context=2 modperl_handler_name
00000000000053b0 T _modperl_handler_lookup_handlers
0000000000005190 T _modperl_handler_make_args
U _modperl_handler_name
0000000000004eb0 T _modperl_handler_new
00000000000056c0 T _modperl_handler_new_from_sv
Indeed, not defined. So I go and look at modperl_handler.c
MP_INLINE
const char *modperl_handler_name(modperl_handler_t *handler)
{
...
}
So, wonder what MP_INLINE is defined as, and in modperl_common_util.h I find:
#ifdef MP_DEBUG
#define MP_INLINE
#else
#define MP_INLINE APR_INLINE
#endif
Running the pre-processor stage only, I see the definition ends up as:
__inline__
const char *modperl_handler_name(modperl_handler_t *handler)
So I just forced MP_INLINE to be defined blank, which made everything work
cleanly.
Can anyone tell me what the real problem and fix are?
Cheers,
Neil