MacOSX LionでのRubyの扱い方、またはllvm-gccについて。
はじまりはgem install sqlite3-rubyが上手くいかなかったこと。
gemが悪いのかsqlite3が悪いのかと調べていったら、最終的な原因はLion(Xcode)のgccだった。
※以降、LionのXcodeを入れることでインストールされるgccをllvm-gccと記載する。
環境
今回の作業開始時の環境は以下の通り。
迷走の記録
備忘として、簡単なまとめ。
- gem install sqlite3-rubyでエラー。
- sqlite3をyumかMacportsでいれろと言われるが、port install sqlite3 +universalでエラー。
- portのためにXcodeを更新する。(数時間かかる)
- port install sqlite3 +universalは成功。
- それでもgem install sqlite3-rubyでエラー。
- 何が悪いのかわからず、実験としてrvmの1.9.2で試すとすんなり入る。これはこれで困る。
- rvmで1.8.7を入れたらsqlite3-rubyも入るんじゃないかと閃く。(systemのRubyはもう諦めよう。)
- rvm install 1.8.7は成功するが、gemコマンドで右のようなエラー。(略)/ruby/1.8/timeout.rb:60: [BUG] Segmentation fault
- 検索するとllvm-gccだと上記のエラーとなるらしいのでgccを入れる。
- rvm install 1.8.7をやり直し、sqlite3-rubyを入れると成功。
- もしや?と思いsystemのRuby(1.8.7)でsqlite3-rubyを入れると成功。
要するに、全部llvm-gccが悪い!
(逆に考えるとRuby1.8系が悪い(古い)、ということにもなるが。)
なお、rvmについてはこちら。
Rubyの複数バージョンを共存させるgem。rvmとpikについて - holyppの日記
sqlite3-rubyで何度も出たエラーはこちら。
iMac% sudo gem install sqlite3-ruby Password: Building native extensions. This could take a while... ERROR: Error installing sqlite3-ruby: ERROR: Failed to build gem native extension. /opt/local/bin/ruby extconf.rb checking for sqlite3.h... no sqlite3.h is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite-devel' and check your shared library search path (the location where your sqlite3 shared library is located). *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/local/bin/ruby --with-sqlite3-dir --without-sqlite3-dir --with-sqlite3-include --without-sqlite3-include=${sqlite3-dir}/include --with-sqlite3-lib --without-sqlite3-lib=${sqlite3-dir}/lib --enable-local --disable-local Gem files will remain installed in /opt/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.5 for inspection. Results logged to /opt/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
Xcodeの更新
(2012/7/23追記)この項は行わず、次項の「gccのインストール」のみ行っても動作すると思います。急ぎでxcodeが不要の方は飛ばして下さい。
上記のとおり、gemだけじゃなくMacportsもエラーを出すし、どうしようか困っていた。
調べていると「LionにしたらXcodeは入れなおせ」と各所に書いているので入れ直す。
AppStoreから無料でインストールできるが時間がかかる。3Gほどあり、1時間どころじゃないのでしばらく放置した。
Mac App Store - Xcode
※↑リンクがうまくいかなければ「xcode app store」などで検索して下さい。
Xcodeを入れ直す理由は、Lionにするとgccやmakeが消えるからということ。これはひどい。
Macportsがエラーを出してたのもXcodeを入れ直すことで解消され、sqlite3がインストールできた。
(sudo port clean libeditしろとは言われたけど。)
そして、Ruby1.8系などを除けばこれで十分動くんだろうけど、実はここで入ったllvm-gccが諸悪の根源だった。
iMac% gcc --version i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gccのインストール
port install sqlite3 +universal が成功するも gem install sqlite3-ruby のエラーメッセージは変わらず。
systemのRubyを消すのもはばかられるし、rvmで1.8.7を入れてメインにしようと考える。
結局それはllvm-gccのせいで失敗するのだが。
ログを取ってなかったのでllvm-gccを使って再現しようとしたら、今ではしっかり教えてくれて再現すらできなかった。
iMac% rvm install 1.8.7-head The provided CC(/usr/bin/gcc) is LLVM based, it is not yet fully supported by ruby and gems, please read `rvm requirements`.
当初は rvm install 1.8.7-head は成功したように見え gem install sqlite3-ruby で [BUG] Segmentation fault というエラーが出ていた。
そこから検索するとllvm-gccが悪いという情報が出てくるので、gccをこちらからインストール。
kennethreitz/osx-gcc-installer · GitHub
readmeの OS X 10.7 Lion: GCC-10.7.pkg からダウンロードして実行するだけ。
そして環境変数CCを.bash_profileに書き、ターミナルを再起動する。
iMac% echo "export CC=/usr/bin/gcc-4.2" >> ~/.bash_profile
その場限りなら export CC=/usr/bin/gcc-4.2 とコマンドを打つだけで良い。
解決
sqlite3を入れるのにここまで苦労するとは思わなかった。
いろいろとやってきたが、結局、問題はllvm-gccだけだったのだ。
iMac% echo $CC /usr/bin/gcc-4.2 iMac% ruby -v ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10] iMac% gem -v 1.3.7 iMac% gem list *** LOCAL GEMS *** actionmailer (2.3.5) actionpack (2.3.5) activerecord (2.3.5) activeresource (2.3.5) activesupport (2.3.5) i18n (0.4.2) mime-types (1.16) mysql (2.8.1) rack (1.1.0, 1.0.1) rails (2.3.5) rake (0.9.0) rest-client (1.6.1) rubygems-update (1.3.7) iMac% sudo gem install sqlite3-ruby Building native extensions. This could take a while... ####################################################### Hello! The sqlite3-ruby gem has changed it's name to just sqlite3. Rather than installing `sqlite3-ruby`, you should install `sqlite3`. Please update your dependencies accordingly. Thanks from the Ruby sqlite3 team! <3 <3 <3 <3 ####################################################### Successfully installed sqlite3-1.3.5 Successfully installed sqlite3-ruby-1.3.3 2 gems installed Installing ri documentation for sqlite3-1.3.5... No definition for libversion Enclosing class/module 'mSqlite3' for class Statement not known Installing ri documentation for sqlite3-ruby-1.3.3... Installing RDoc documentation for sqlite3-1.3.5... No definition for libversion Enclosing class/module 'mSqlite3' for class Statement not known Installing RDoc documentation for sqlite3-ruby-1.3.3... iMac%
お疲れ様。
参考サイト
こちらを参考にさせていただきました。ありがとうございます。
Xcode4.2にするとRubyがインストール出来ない、っていうやつにはまってみた - KUROIGAMEN(黒い画面)
Mac OS X Lionにしたらgccがなくてnode.jsがコンパイルできなくなった件 - 大人になったら肺呼吸