CentOS5 64bit版でmod_perlのmakeでエラー

perlbrewでインストールしたperlapachemod_perlをソースビルドしようとしたら
mod_perlのmakeでエラーが発生。
以下はその対応記録。

環境

os CentOS5.3 64bit
perl 5.12.1
apache 2.2.15
mod_perl 2.0.4

エラー内容

libperl.a(op.o): relocation R_X86_64_32S against `PL_sv_yes' can not be used when making a shared object; recompile with -fPIC 
libperl.a: could not read symbols: Bad value 


ググってみたら、これらがHITした。
http://www.gossamer-threads.com/lists/modperl/modperl/101165
http://old.nabble.com/Compiling-Perl-+-mod_perl-on-64-bit-linux-td19153871.html
どうもCentOSの64bit版でのみ発生するっぽい。
オプション付け直してperlを再インストールする必要がある?

perlを普通にダウンロードしてリビルド

上記のスレッドを参考にして、
perlのコンフィグオプションを以下のようにして*1リビルドしたら
mod_perlのmake通った!

sh ./Configure -de -Accflags='-fPIC' -Dloclibpth="/usr/lib64" 

perlbrewでもやりたいが…

perlbrewでも一応コンフィグオプション渡せるみたい。

-D
pass through switches to the perl Configure script

    perlbrew install perl-5.10.1 -D=usemymalloc


しかしソースを見ても「-A」オプションを指定する箇所が無い…
ので、独自パッチを当てた。

App::perlbrew 0.07

diff /usr/local/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/App/perlbrew.pm-org /usr/local/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/App/perlbrew.pm
209a210
>         my @a_options = @{ $self->{A} };
241c242
<             "sh Configure $configure_flags " . join( ' ', map { "-D$_" } @d_options ),
---
>             "sh Configure $configure_flags " . join( ' ', map { "-D$_" } @d_options ) . " " . join( ' ', map { "-A$_" } @a_options ),

perlbrew 0.07

# diff /usr/local/perlbrew/bin/perlbrew-org /usr/local/perlbrew/bin/perlbrew
12a13
>     A     => [],
19a21
>     'A|A=s@'    => $opt->{A},

perlbrewでperlインストール

上記パッチを当てた後、以下のようなオプションを渡してあげると
同じくmod_perlのmakeは通った。*2

perlbrew install perl-5.12.1 -A=ccflags=-fPIC -D=loclibpth=/usr/lib64


どんどはれ。

*1:オプションの意味はよくわかってない

*2:mod_perlのmake testが通らないのはヒミツ