perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steve Hay" <Steve....@verosoftware.com>
Subject RE: Problem with 2.0.7: Symbol not found: _modperl_handler_name and workaround
Date Mon, 12 Nov 2012 13:09:11 GMT
Not really much idea, but a couple of possibilities spring to mind: does
your new build have an updated APR, and has the definition of APR_INLINE
changed in it? Also (just looking at the definition of MP_INLINE which
you've quoted...) presumably your new build doesn't have MP_DEBUG
defined; is it possible that your previous build did have it defined so
that MP_INLINE was blank anyway?

 

From: Neil Bowers [mailto:neil@bowers.com] 
Sent: 12 November 2012 12:18
To: modperl@perl.apache.org
Subject: Problem with 2.0.7: Symbol not found: _modperl_handler_name and
workaround 

 

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

 


Mime
View raw message