cpan でBit::Vector をインストールしようとしたらこけた
CPAN になかなかなじめない。大抵インストールこけるから。CPAN がんがん使えるとかっこいいな〜。
ということで、今回もインストールに失敗したのでメモ。
環境
$ cat /etc/redhat-release CentOS release 5.2 (Final)
エラー内容
$ sudo cpan -i Bit::Vector .... make: *** [Vector.o] Error 1 STBEY/Bit-Vector-6.4.tar.gz /usr/bin/make -- NOT OK CPAN: YAML loaded ok (v0.66) Running make test Can't test without successful make Running make install Make had returned bad status, install seems impossible
make でこける。エラーした箇所をみてみると。以下のようになっていました。
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/perl.h:496:23: error: unistd.h: No such file or directory
unistd.h がないとか。そんなことあるのか?ということでチェック。
$ locate unistd.h /usr/include/asm/unistd.h /usr/include/bits/unistd.h /usr/include/linux/unistd.h /usr/include/sys/unistd.h /usr/lib/syslinux/com32/include/unistd.h /usr/share/man/man0p/unistd.h.0p.gz
・・・こんなに沢山あるものなのか?でも、unistd.h はあることにはある。
でも、普通「/usr/include/unistd.h」があるものなんじゃないのかなと思いローカルのMac で見てみる。
$ locate unistd.h ...... /usr/include/sys/unistd.h /usr/include/unistd.h
あった!
ここで仮説。多分、cpan モジュールをインストールする際に、デフォルトでは「/usr/include」以下にヘッダファイルがあると仮定されている。で、そこにはないのでエラー。
解決策
「/usr/include」以下に「unistd.h」があればいいと予想できるので、シンボリックリンクをはることにしました。でも、あまり良い方法ではないと思う。ヘッダファイルの位置を指定できるオプションとかがあるのだろうか。
$ sudo ln -s /usr/include/linux/unistd.h /usr/include/unistd.h $ sudo cpan -i Bit::Vector ... Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod STBEY/Bit-Vector-6.4.tar.gz /usr/bin/make install -- OK
入った。特に問題なく使えました。
感想
入ったには入ったけど、解決策としては微妙。多分、次のように解決するのがいい。
- 1. 本当は「/usr/include/unistd.h」がある
今回はCentOS をインストールする際に開発ツールなどは何もインストールしなかった。unistd.h が「/usr/include/」下になかったのはこのせいかもしれない。
実際、CentOS 4.4には「/usr/include/unistd.h」がある。
- 2. ヘッダファイルの位置を指定できる方法がある
これはかなり有力。configure 実行するときとか、make する際にオプションをつけることは多いし、そこでヘッダファイルの位置を指定する方法があると期待できる。
linux は奥が深い。make とか実際中身はよくわかってないからな〜。勉強しなきゃな!