パスワードを忘れた? アカウント作成
12049363 journal
Ruby

route127の日記: 【連休】Ruby/CHISEの導入をあきらめる【終了】

日記 by route127

Ruby/CHISEの導入をあきらめた。
UnicodeのIDSに基づいて漢字の字形分解・合成を行うことができるのだが、それを使って漢字の画数を数えようとしていた。
画数を数えるならPerlでもkanjidicを利用して画数は調べられるのだが、使ってみるとデータベースに画数が登録されていない漢字が割りとよくある。
そういったデータベース上で画数が未知の漢字について、画数が判明するまで分割を試みた後にそれらを合計する、みたいなことがしたかった。
最初Windows8.1上の64bit版Cygwin2.0で作業していたが、ruby1.8がビルドできずあきらめた。
次にWindowsXP上のCygwin(gnupack_devel-11.00)上で試みるも、ruby1.8へのBerkeleyDBが導入できずに断念した。
最後にその辺に転がっていたRaspberryPiへの導入を試み、サンプルコードの実行にまで到ったが期待した出力が出なかった。

当初ruby1.8をインストールするにあたり、元から入っているruby1.9.3と干渉しないようrbenvを使うことでrubyのversionを切り替えることを考えていたが、結局gccに--program-suffixオプションつけることにしてソースからビルドすることにした。
64bit版のcygwinでは./configureがどうもマシンの判定ができないらしくエラーが出るので--buildオプションを付加した。

./configure --program-suffix=-1.8 --build=x86_64-pc-cygwin

--buildオプションの引数はgcc -dumpmachineの出力をそのまま使ったけれども、方法として間違っているかもしれない
とりあえず./configureは通ったけれども次はmakeでエラーが出力される。
Cygwin上でコンパイルするとeval.cのプロトタイプ宣言のところでエラーが出るので当該行(ruby1.8.7-p573では221行目)

int _setjmp(), _longjmp();

を削除する。
エラー行を削除というのは場当たり的な対応だと思ったが、リンク先をみて宣言の矛盾を自分でも確認できたのでそれほど迷わなかった。
また、eval.cは10221行目でもエラーがでる。

#if !defined SAVE_WIN32_EXCEPTION_LIST

の辺りから出てるエラーなのだがよくわからず。
file.cやgc.cも逐次修正したが結局コンパイルが通らなかった。
historyを見るとmingwでもコンパイルを試みた跡がある。

./configure --program-suffix=-1.8 --build=i686-pc-linux-gnu
./configure --program-suffix=-1.8 --build=i686-pc-linux-gnu --enable-shared CC='gcc'
./configure --program-suffix=-1.8 --build=i686-pc-linux-gnu --enable-shared CC='i686-pc-mingw32-gcc-4.7.3'
./configure --program-suffix=-1.8 --enable-shared CC=x86_64-w64-mingw32-gcc
./configure --program-suffix=-1.8 --enable-shared CC=x86_64-w64-mingw32-gcc --build=x86_64-w64-mingw32
./configure --program-suffix=-1.8 --enable-shared CC='gcc' --build=x86_64-pc-cygwin

rbenv等に引数を渡す場合はCONFIGURE_OPTを介して渡せばいいのか?

CONFIGURE_OPT="--program-suffix=-1.8 --enable-shared CC=x86_64-pc-cygwin-gcc --build=x86_64-pc-cygwin" rbenv install 1.8.7-p375

そんなわけで32bit環境で再挑戦をしたところruby-1.8本体のインストールには成功したものの、CHISEに必要なBerkeley DBのインストールに目処がつかなかった。gemで検索

gem search bdb

しても見つからず、結局ソースからビルドすることにした。
http://ftp.urc.ac.ru/pub/OS/FreeBSD/distfiles/ruby/bdb-0.5.3.tar.gzからソースを取得するもextconf.rb(./configureとかMakefile.PLみたいな)によるMakefileの生成に失敗した。
エラーメッセージを見るにextconfに引数でライブラリのパスを与えてやればよいはずなのだがうまくいかず。
db4.8はapt-cygでインストールし、インストール先はcygcheck -l で調べて、

ruby extconf.rb --with-db-version=4.8 --with-db4.8lib=/usr/bin --with-db-include=/usr/include/db4.8/
ruby extconf.rb --with-db-dir=/usr/include/db4.3/
ruby extconf.rb --with-db-dir=/usr/lib/

など試すがうまくいかず。

最後の試みとしてRaspberry Piで試したところこれまでの経験もあってかインストール完了までこぎつけたが、それはapt-getにruby1.8およびrubygem1.8が用意されており、rubygem1.8からbdbがインストールできたことに負うところが大きい。
ruby1.8系と1.9系に互換性がない為か、apt-getで明示的に1.8系がインストール出来るようになっているようでgemについても1.8用が用意されていた。
また、mkmfを利用するためにruby-devもインストールした。
ruby-bdbはgemで入れるbdbの代わりになりえるのかよくわからないまま念のため入れているがいまいちよくわかっていない。

apt-cache search ruby1.8
sudo apt-get install ruby1.8 rubygems1.8
sudo apt-get install ruby-dev
sudo apt-get install libdb4.3-ruby1.8
sudo apt-get install ruby-bdb
dpkg -L ruby-bdb
dpkg -L libdb4.3-ruby1.8
sudo gem install bdb -- --with-db-dir=/usr/lib
sudo gem install bdb -- --with-db-dir=/usr/lib/ruby/vendor_ruby/1.8/

gemに引数渡すための--がなんか納得いかない。
とりあえずこれで環境は整ったので、サンプルプログラムを打ち込むが期待した出力がされず-dスイッチをつけながら修正を試みた。
config.rb内でのchar-dbの指定がうまくいってなかったのでfileコマンドで見るとsoファイルがPEフォーマットだったりchar-dbがcygdrive見ようとしていたりした。
config.hを修正したりとかビルドしなおしたりとかしてたけど諦めた。

MacはfinkでXEmacs CHISEが入るらしい。
よくわからないがfinkというのはMacのCygwinみたいなものなのか?

それにしてもapt-cyg, apt-get, rbenv, gemと微妙にコマンド違うので混乱した。
Cygwin上のapt-cygで出来てたことがDebian上ではapt-cygとapt-cacheを使い分けないといけなかったりcygcheck -lに相当するコマンドがdpkg -Lだとわかるまで時間がかかったりした。
gemにしてもcpanみたいなものだとわかるけれどサブコマンドがわからなかったり細かいところでつっかえるのであんちょこを用意しておきたいところ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...