田園都市技術屋online日記

アクセスカウンタ

zoom RSS ruby de wxruby:SnowLeopardでハマる (netbeans力技編)

<<   作成日時 : 2010/02/14 14:31   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

(つづき…)

スクリプトで偽装作戦がnetbeansに拒否されたため、力技に方針変更。

「-arch i386のrubyを別途用意する」

とりあえずあまりタイプ数は減らないが変数を設定
arch_flags="-arch i386"

調査の結果readlineを最新版にした方が吉みたいなので、まずreadlineから取りかかる。 ソースをwgetして展開。 展開したディレクトリ内でビルド開始。


./configure CFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" --enable-multibyte --enable-shared

make

sudo make install


/usr/local にreadlineをインストールしここまでは快調。
 
つづいてrubyのビルド。 ソースをwgetして展開。 取り寄せたのはRuby 1.8.7 (2010-01-10 patchlevel 249) 。 展開したディレクトリ内でビルド開始。 readlineは/usr/local に先ほどインストールした物を指定。


./configure CFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" --enable-shared --enable-pthread --with-readline-dir=/usr/local

make


ここで、エラーに引っかかりハマる。


ld: warning: in array.o, file is not of required architecture



リンカのところで以下同文な警告が大量発生している。 .oファイルはちゃんとi386でできているのに… よくよく見るとリンカがデフォ動作でx86_64なダイナミックライブラリを作ろうとしていることに気づく。 


cc -dynamiclib -undefined suppress -flat_namespace -install_name /usr/local/lib/libruby.dylib -current_version 1.8.7 -compatibility_version 1.8 array.o bignum.o class.o compar.o dir.o dln.o enum.o enumerator.o error.o eval.o file.o gc.o hash.o inits.o io.o marshal.o math.o numeric.o object.o pack.o parse.o process.o prec.o random.o range.o re.o regex.o ruby.o signal.o sprintf.o st.o string.o struct.o time.o util.o variable.o version.o dmyext.o -o libruby.1.8.7.dylib



というか折角設定したLDFLAGS="$arch_flags"はどこへ行った?。 生成されたmakefileを横目に遡ってconfigureを探ると。


LIBRUBY_DLDFLAGS=$DLDFLAGS


darwin*)
LIBRUBY_SO='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib'
LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace'
LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'


他のOSと比較するとダイナミックライブラリへのオプションは折角設定した$LDFLAGSでなくヘルプにも出てこない$DLDFLAGSから決まっているみたいだ。  しかしdarwinの場合はconfigureのコマンドラインオプションで「DLDFLAGS="-arch i386"」を渡してしても上書きされてしまう。  ということでちゃんと渡したフラグを反映するようconfigureにパッチを当てる。 こんな感じ。

$ diff configure configure.org

17482c17482
< LIBRUBY_DLDFLAGS="${DLDFLAGS} "'-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'
---
> LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'


再度DLDFLAGSを追加して、configure。


./configure CFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" DLDFLAGS="$arch_flags" --enable-shared --enable-pthread --with-readline-dir=/usr/local

make

sudo make install



今度はビルドを通してくれてインストール完了。 バージョンを確認すると…

Ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10.2.0]

ちゃんと [i686-darwin10.2.0]だ。
仕上げにrubygemsを導入。 ソースをwgetして展開。 展開したディレクトリ内でsetup開始。

sudo /usr/local/bin/ruby setup.rb

こちらは一発で通してくれた。
netbeansの「rubyプラットホームマネージャ」に新しいrubyを認識させると、ようやくnetbeans上で「Hello World!」がでた。

というわけでようやく複合ハマりから脱出に3日間。 どれもcocoa対応でそのうち不要になるだろうが当面忘れないようにメモしておく。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
ruby de wxruby:SnowLeopardでハマる (netbeans力技編) 田園都市技術屋online日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる