Theme NexT works best with JavaScript enabled
0%

Failed to build gem native extension using rvm on Lion

因為在轉換資料到新買的MBA上時,誤以為OSX內附的資料轉移程式有確實地把所有的資料備份上去,而把原本的硬碟格式化重灌,直到格式化完畢之後才發現這殘酷的事實……orz

就連我的octopress資料夾也跟著消失了,所以只好重新設定一個新的blog。

先前的環境中,我是用Homebrew所編出來的MRI ruby 1.9.2,但是發現在某些kog中,Homebrew用到了不相容於1.9.2的語法(實際上Homebrew本來就有提醒使用者,目前的版本只會相容於1.8.7),懶得手動切換的我,決定安裝rvm。

其實一開始我也是用rvm,只是不知道為什麼後來改用Homebrew的ruby,只依稀記得似乎是安裝gems時的問題…… 而現在又被我遇到了。

在clone完octopuses的repo之後,下了bundle install的指令來安裝所需的gems,結果出現了這樣的錯誤訊息:

1
2
3
4
5
6
7
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/Users/brucehsu/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for main() in -lc... *** 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.

既然提示都說了,那就檢查看看mkmf.log裡寫了什麼:

1
2
3
4
5
6
7
"/usr/bin/gcc-4.2 -o conftest -I/Users/brucehsu/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-darwin11.2.0 -I......."
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() {return 0;}
/* end */

在搜尋之後,終於找到問題所在,如果你遇到這個問題,你可以用以下的指令察看目前所用ruby版本預設的gcc路徑

1
ruby -rrbconfig -e 'puts Config::CONFIG["CC"]'

出來的結果應該會如同上面的錯誤訊息一樣是/usr/bin/gcc-4.2

而在列出/usr/bin底下的檔案之後,你應該會發現,裡面沒有gcc-4.2這個檔案!(如果你也是用Xcode 4.2的話)

既然找到問題,那解決辦法就很簡單了,只要將作個gcc-4.2的symbolic link到llvm-gcc-4.2就行了。

1
sudo ln -s llvm-gcc-4.2 gcc-4.2