Solaris10でKyoto CabinetとKyoto Tycoonをビルドする。

Kyoto Tycoonが0.9.53でSolaris10でも動くようになったのでメモメモ。
0.9.52まではSolaris10ではsetsockoptのSO_RCVTIMEOとSO_SNDTIMEOが必ず失敗するのでSocketの接続が全てRejectされていました。0.9.53では設定は試みるけどエラーチェックをしなくなったので、Solaris10でも繋がるようになりました。

ビルドをするためにGCC4.4を入れます。GCC4.6じゃないの?と言われそうですが、依存ライブラリのmpc(gcc-4.5から必要)のビルドがgcc3.4.3で出来ないので1回GCC4.4系を入れます。gcc3.4.3でもconfig.hを書き換えればいけると思いますけど。
gmpとmpfrとmpcはgcc4-deps-libへ入れるという方向で行きたいと思います。

まず事前にgrepが/usr/xpg4/bin/grepを使うようにPATHを調整します。そうしないと、/usr/bin/grepを使ってしまいconfigure時にオプションを解釈できなくてチェックが正常に動きません。

gmp

 cd gmp-5.0.2
 ./configure --prefix=/usr/local/gcc4-deps-lib
 gmake > /dev/null
 gmake check
 gmake install

mpfr(documentに書いてあるとおり、パッチも当てます)

 cd mpfr-3.1.0
 wget http://www.mpfr.org/mpfr-3.1.0/allpatches
 /usr/bin/gpatch -N -Z -p1 < allpatches

 ./configure --prefix=/usr/local/gcc4-deps-lib --with-gmp=/usr/local/gcc4-deps-lib
 gmake > /dev/null
 gmake check
 gmake install

libgccのビルドにこけるので、以下を設定します。

 export LD_LIBRARY_PATH=/usr/local/gcc4-deps-lib/lib:$LD_LIBRARY_PATH

gcc4.4.6

 ./configure \
   --prefix=/usr/local/gcc446 \
   --with-ar=/usr/ccs/bin/ar \
   --with-as=/usr/ccs/bin/as \
   --with-ld=/usr/ccs/bin/ld \
   --enable-shared \
   --enable-languages=c,c++ \
   --with-gmp=/usr/local/gcc4-deps-lib \
   --with-mpfr=/usr/local/gcc4-deps-lib

 gmake -j 2 bootstrap
 gmake install

確認

 export LD_LIBRARY_PATH=/usr/local/gcc446/lib:$LD_LIBRARY_PATH
 /usr/local/gcc446/bin/gcc -v
Using built-in specs.
Target: i386-pc-solaris2.10
コンフィグオプション: ./configure --prefix=/usr/local/gcc446 --with-ar=/usr/ccs/bin/ar --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-shared --enable-languages=c,c++ --with-gmp=/usr/local/gcc4-deps-lib --with-mpfr=/usr/local/gcc4-deps-lib
スレッドモデル: posix
gcc version 4.4.6 (GCC)

環境変数はこんな感じで設定しております。

LD_LIBRARY_PATH=/usr/local/gcc446/lib/amd64:/usr/local/gccc446/lib:/usr/local/gcc4-deps-lib/lib:/usr/local/lib:/usr/ccs/lib:/usr/sfw/lib:/opt/sfw/lib:/usr/lib:/lib:/etc/lib
PATH=/usr/local/gcc446/bin:/usr/local/bin:/usr/xpg4/bin:/usr/xpg6/bin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

次にKCを入れます。

 ./configure CXX=/usr/local/gcc446/bin/gcc --prefix=/usr/local/kc-1.2.72
 gmake
 gmake install

次はKTを入れます。 とりあえずの注意点としては、-m64を付けないとconfigure時にlibkyotocabinetが認識できません。これは、libkyotocabinetが64ビットのSOであるのにconftest.cppを作ってリンクの確認をする時に-m64がつかなくて32ビットのELFに64ビットのSOをリンクしようとするからです。また、CXXに明示的にg++を指定しているのは、-m64つけた時にこれを指定しないとpthreadなどの他のライブラリを認識できなかったからです。

./configure \
  CXXFLAGS="-m64" \
  CXX="/usr/local/gcc446/bin/g++" \
  LDFLAGS="-R/usr/local/kc-1.2.72/lib -R/usr/local/kt-0.9.53/lib" \
  --prefix=/usr/local/kt-0.9.53 \
  --with-kc=/usr/local/kc-1.2.72
gmake
gmake install

確認をします。ktserverを立ち上げて以下のコマンドを打ちます。

bash-3.2# echo "hello" | /usr/local/kt-0.9.53/bin/ktutilmgr http -put http://localhost:1978/test1
bash-3.2# /usr/local/kt-0.9.53/bin/ktutilmgr http -get http://localhost:1978/test1
hello

動いた動いた。やったね。

 

新しいサイトもよろしくお願いします!