[Ruby]Mac OS X 10.9(Marvericks)でactiverecordのインストールに失敗する(atomicのビルド失敗)

『Webアプリエンジニア養成読本』のRuby編をやっていたら、Activerecordのインストールでこけました。

環境は、OS X 10.9.2/Xcode5.1。

どうやら、atomicというRuby拡張のビルドに失敗している模様。

色々と原因を探ってみたところ、gcc(clang)のバージョンが原因でした。なお、私の環境のgccのバージョンは以下の通り。

$ which gcc
/usr/bin/gcc
$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

OS Xユーザーが使用しているgccは、XCodeのコマンドラインツールとしてインストールしたgccであることが多いと思います。このgcc、コマンドはgccなのですが、gcc -vしてみれば分かるように、実態はclangなのです。

(そもそもgccって何? って人のために説明すると、gccは
GNU Compiler Collectionの略で、C言語等の各種言語に対応したコンパイラ(プログラミング言語で書いたソースコードをコンピュータが実行可能なバイナリコードに変換する翻訳機)のこと。clangは、これまたC言語等のコンパイラなのだけど、割と最近出てきたコンパイラで、gccのライバル)

そして、XCode5.1に付属するclangでは、未知のビルドオプションを指定した場合にエラーを吐くようになりました。エラーなので、発生した時点でビルドが強制終了されます。

Xcode 5.1 Release Notes

The Apple LLVM compiler in Xcode 5.1 treats unrecognized command-line options as errors. This issue has been seen when building both Python native extensions and Ruby Gems, where some invalid compiler options are currently specified.

Projects using invalid compiler options will need to be changed to remove those options. To help ease that transition, the compiler will temporarily accept an option to downgrade the error to a warning:

-Wno-error=unused-command-line-argument-hard-error-in-future

このエラーを抑止する方法は、上記引用文に紹介されている「-Wno-error=unused-command-line-argument-hard-error-in-future」オプションをつけてビルドすることです。

このオプションを使用しつつ、ビルドを実行するには、以下のように環境変数をセットしつつbundle installすればOKです。

$ sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install

2013-04-06 追記

Nokogiriのインストールの際にも、mini_portileというネイティブ拡張のビルドでこけました。上記と同様、ビルドオプション付きのbundle installしたらOK。OS X 10.9でRubyのネイティブ拡張ビルドに失敗したら、まずは上記オプション付きのビルドを試すのが良さそう。

コメントをどうぞ

コメントを残す