CentOS 4.8 上で perlbrew install するときは /usr/include/poll.h をリネームしておく

CentOS 4.8 上で「perlbrew install 任意のバージョンのPerl」を実行したら、コンパイルエラーでインストールできなくなっていました。

perlbrew は任意のバージョンのperlを$HOME(自分のホームディレクトリ)以下にインストールするためのアプリケーションです。
レンタルサーバや研究室など複数人で計算機を共有する場合に、他人に影響を与えずに任意のバージョンの Perl をインストールできるので重宝します。

perlbrew のインストール方法をについては『「perlbrew」と「cpanminus」と「local::lib」を使って、さくらのレンタルサーバで任意のバージョンのPerlを使う』 [2010-04-24-1] という記事に書きました。

さて、本題に戻ってログを見てみると、ざっと以下のようになっていました。

$ tail -f $HOME/perl5/perlbrew/build.log
(中略)
IO.xs: In function `XS_IO__Poll__poll`:
IO.xs:249: error: Invalid application of `sizeof` to incomplete `pollfd`
(省略)


このようなエラーが出ているためインストール時にエラーが出た Perl のソースを grep してみたところ、/usr/include/poll.h と /usr/include/sys/poll.h をチェックしているようです。で、存在していたら優先的に include される前者の /usr/include/poll.h が不具合の原因かもしれないと思い、ファイル名を変更したところ、perlbrew install できました。force オプションは付けなかったので sys/poll.h が include されて IO.xs から成生された IO.c を正常にコンパイルできたのでしょう。

なんで、include/poll.h は駄目で、include/sys/poll.h が大丈夫なのかは深追いしてない分かりませんが、検索エンジンで検索しても同じエラーが出た起きていることを書いている人が1人しか見つからないので、非常に稀な問題でハマってるのかも。。。
素直に CentOS 5.x 系を使っていれば起きない問題なのかもしれませんね。


投稿者:としのり  日時:23:59:59 | コメント | トラックバック |
blog comments powered by Disqus