perlをsolarisにインストールするときのメモ。いろいろと苦労した結果、なんとかインストールできたので、記録しておく。ruby, pythonでもいろいろと同じようなのが出てきたので、みんな苦労しているんだということがわかっただけでも収穫である。
prefixさえ合わせれば、問題なさそうな感じ
Solarisのパッケージ管理システムでpkginを使っている。それでgccをインストール。arやndなどは/opt/local/binにインストールされる
pkgin install gcc-compiler gcc-toolsメジャーなのかよくわからないけどこういう状態。作業場所はcd /usr/local/src/perl-5.14.2とする
./Configure -Dusedtrace -Duseshrplib -Dusethreads -Duseithreads -Uusemymalloc -Duse64bitall -Dusemymalloc -Duseposix -Duselargefiles -Dcc='gcc -m64 -B/usr/ccs/bin/' -Dprefix=/usr/local/perl-5.14.2 -Accflags=-fPIC -Dccdlflags="-Wl,-E" -Dlddlflags="-Wl,-E -G"とするとmake途中でここにのっている問題にぶち当たる
fatal: relocation error: R_AMD64_PC32:gccを使う場合は-Accflags=-fPICをつけるようにするといいと書いているところもあるけど結局は変わらず。普通の32bit modeだと何もおきない(gccの-m64、-Duse64bitallをはずす)。というわけで64bitにする必要がないのならperlbrewで普通にインストール可能
これを使えば問題なくインストールできそうだが、対話式でインストールする必要がありそう(-desはつけない)。もちろんdtraceを有効にしてインストール。使い方はよくわかってないけど。
SolarisStudioのことはここにまとめておいた
desをつけていないので全て対話形式になるが気になるところだけいうと
library path検索対象
library。まあ好きにしたらいいとは思うけど一応
libc.so path
重要なのは-Kpicというフラグでoracleの人が書いていると思われるblogにそのことが書かれている。
あとはmake, make installをすればよい。一応makeの時点で生成されるperlとlibperl.so(-Duseshrplibを指定すると生成される)をそれぞれfileコマンドで確認すると
SolarisStudioのことはここにまとめておいた
./Configure -Dusedtrace -Duseshrplib -Dusethreads -Duseithreads -Uusemymalloc -Duse64bitall -Dusemymalloc -Duseposix -Dcc='/usr/ocal/solarisstudio/bin/cc' -Dprefix=/usr/local/perl-5.14.2 -Dlibs="-lm -ldl -lsocket -lnsl -lpthread -lrt -lc" -Accflags=-Kpic
desをつけていないので全て対話形式になるが気になるところだけいうと
library path検索対象
Directories to use for library searches? [/opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib] /lib/64 /usr/lib/64 /opt/local/lib/amd64 /opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib
library。まあ好きにしたらいいとは思うけど一応
What libraries to use? [-lsocket -lnsl -ldl -lm -lpthread -lc] -lsocket -lnsl -ldl -lm -lpthread -lc -lrt
libc.so path
Where is your C library? [/lib/libc.so] /lib/64/libc.soこれくらい。あとは
Shall I use /usr/bin/nm to extract C symbols from the libraries? [y]などと聞かれるのでそのまま使うこと。binutilsを入れていると/opt/local/bin/nmを見てしまったりするので、くれぐれもインストールされている場合は削除すること。gcc-toolsが入っていればそもそも事足りる。
重要なのは-Kpicというフラグでoracleの人が書いていると思われるblogにそのことが書かれている。
あとはmake, make installをすればよい。一応makeの時点で生成されるperlとlibperl.so(-Duseshrplibを指定すると生成される)をそれぞれfileコマンドで確認すると
file ./perl ./perl: ELF 64-bit LSB executable AMD64 Version 1 [SSE FXSR FPU], dynamically linked, not stripped file ./libperl.so libperl.so: ELF 64-bit LSB dynamic lib AMD64 Version 1 [SSE2 SSE CMOV FPU], dynamically linked, not strippedとなっていることがわかる
- ダウンロードはperl5/perlbrew/dists/perl-5.14.2.tar.bz2にされる
- 展開はperl5/perlbrew/build/perl-5.14.2
- インストール先はperl5/perlbrew/perls/perl-5.14.2/{lib,man,bin}
PERLBREW_BASHRC_VERSION=0.41 PERLBREW_ROOT=/home/holly/perl5/perlbrew PERLBREW_HOME=/home/holly/.perlbrew PERLBREW_PATH=/home/holly/perl5/perlbrew/binperlbrew switchを実行するとなる
PERLBREW_PERL=perl-5.14.2 <- これが追加。$HOME/.perlbrew/initで定義されている PERLBREW_ROOT=/home/holly/perl5/perlbrew PERLBREW_HOME=/home/holly/.perlbrew PERLBREW_MANPATH=/home/holly/perl5/perlbrew/perls/perl-5.14.2/man PERLBREW_PATH=/home/holly/perl5/perlbrew/bin:/home/holly/perl5/perlbrew/perls/perl-5.14.2/bin
Summary of my perl5 (revision 5 version 14 subversion 2) configuration: Platform: osname=solaris, osvers=2.11, archname=i86pc-solaris uname='sunos fc031070-2d68-012f-b921-002590346596.local 5.11 joyent_20111129t184432z i86pc i386 i86pc solaris ' config_args='-de -Dprefix=/home/holly/perl5/perlbrew/perls/perl-5.14.2' hint=recommended, useposix=true, d_sigaction=define useithreads=undef, usemultiplicity=undef useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/opt/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPERL_USE_SAFE_PUTENV', optimize='-O', cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/opt/local/include' ccversion='', gccversion='4.5.2', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/opt/local/lib -L/usr/gnu/lib ' libpth=/opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib libs=-lsocket -lnsl -ldl -lm -lc perllibs=-lsocket -lnsl -ldl -lm -lc libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-fPIC', lddlflags='-G -L/opt/local/lib -L/usr/gnu/lib -fstack-protector' Characteristics of this binary (from libperl): Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PERL_USE_SAFE_PUTENV USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF Built under solaris Compiled at Feb 6 2012 02:57:17 %ENV: PERLBREW_BASHRC_VERSION="0.41" PERLBREW_HOME="/home/holly/.perlbrew" PERLBREW_MANPATH="/home/holly/perl5/perlbrew/perls/perl-5.14.2/man" PERLBREW_PATH="/home/holly/perl5/perlbrew/bin:/home/holly/perl5/perlbrew/perls/perl-5.14.2/bin" PERLBREW_PERL="perl-5.14.2" PERLBREW_ROOT="/home/holly/perl5/perlbrew" PERLBREW_VERSION="0.41" @INC: /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/i86pc-solaris /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2 /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2/i86pc-solaris /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2
prefixさえ合わせれば、問題なさそうな感じ
タグ
最新コメント