perlbrew を使って Ubuntu 12.04 に perl 環境を構築する
Ubuntu 12.04 に perl 環境を構築しようと思って作業していたのですが、perlbrew を使って perl のインストールをしようとしたところ以下のようなエラーが発生してビルドに失敗してしまいました。
(略) <math.h> found. Checking to see if your libm supports _LIB_VERSION... No, it does not (probably harmless) (略) cc -fstack-protector -L/usr/local/lib -o miniperl \ gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ miniperlmain.o opmini.o perlmini.o~ pp.o: In function `Perl_pp_pow': pp.c:(.text+0x364e): undefined reference to `pow' pp.o: In function `Perl_pp_modulo': pp.c:(.text+0x4415): undefined reference to `floor' pp.c:(.text+0x45af): undefined reference to `floor' (略) collect2: ld はステータス 1 で終了しました make: *** [miniperl] エラー 1 cc -fstack-protector -L/usr/local/lib -o miniperl \ gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ miniperlmain.o opmini.o perlmini.o~ pp.o: In function `Perl_pp_pow': pp.c:(.text+0x364e): undefined reference to `pow' pp.o: In function `Perl_pp_modulo': pp.c:(.text+0x4415): undefined reference to `floor' (略) collect2: ld はステータス 1 で終了しました make: *** [miniperl] エラー 1
どうも libm のリンクがうまくいってない感じがするなー、ということでそっち方向で検索をかけてみたもののあまりいい情報が得られず途方に暮れていたのが先週の話。 さっきなんとなく 「perlbrew Ubuntu」 で検索してみたら色々情報がありました。
- Ubuntu 11.04 (Natty) で perl がインストール出来ない場合の理由と対策 - punitan (a.k.a. punytan) のメモ
- PerlとRubyの開発環境構築メモ(ubuntu 11.10) - jitsu102の日記
- perlbrew on Ubuntu 11.10 - masa-woの日記
Ubuntu Nasty から libm などの位置が変わったが perlbrew の Configure がデフォルトで見に行くパスにそれが含まれていない、ってことが原因のようです。 なので、perlbrew コマンドのオプションとして、libm が入っているパスを指定すれば良い、と。 うちの環境では /usr/lib/x86_64-linux-gnu に libm が入っているので、以下のようにパスを指定してやることで無事ビルドできました。
$ perlbrew install perl-5.14.2 -Dplibpth=/usr/lib/x86_64-linux-gnu
ライブラリの位置の確認方法など、詳細は上に挙げたページをご覧ください。
perl 環境構築の流れ (メモ)
Ubuntu 12.04 に perl 環境を構築する時の流れをメモしておきます。 まずは perl のビルドに必要なパッケージを apt-get でインストール。
$ sudo apt-get build-dep perl
続いて perlbrew をインストール。 詳細は http://perlbrew.pl/。
$ curl -kL http://install.perlbrew.pl | bash
インストール後 ~/.bashrc に以下の 2 行を追加。 この後で端末を新しく開く (とか source コマンドで読み込みなおすとかする) と perlbrew を使えるようになっているはずです。
PATH=$HOME/perl5/perlbrew/bin:$PATH [[ -s "$HOME/perl5/perlbrew/etc/bashrc" ]] && source "$HOME/perl5/perlbrew/etc/bashrc"
あとは perlbrew を使って cpanm をインストールしたり perl をインストールしたり。
# cpanm のインストール $ perlbrew install-cpanm # インストール可能なバージョン一覧を表示 $ perlbrew available # インストール (上で書いたようにライブラリパスをオプションで指定; 以下は 64-bit の場合) $ perlbrew install perl-5.14.2 -Dplibpth=/usr/lib/x86_64-linux-gnu # 32-bit の場合 /usr/lib/i386-linux-gnu