RE: Problem with 2.0.7: Symbol not found: _modperl_handler_name and workaround

"Steve Hay" <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
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:[email protected]] 
Sent: 12 November 2012 12:18
To: [email protected]
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.