ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

perlbrew を使って Ubuntu 12.04 に perl 環境を構築する

Ubuntu 12.04perl 環境を構築しようと思って作業していたのですが、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 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