星期一, 4月 16, 2012

在獅子Mac OSX Lion裝GCC

在2009年我曾經在Linux上頭編譯GCC,因為GCC的授權在4.2.1版之後由GPL v2改為GPL v3,Apple就不再更新GCC。幾年下來造成編譯器版本過舊,蘋果自己也開始打造自己的clang:基於LLVM的compiler;所以現在OS X上有clang和llvm-gcc兩個編譯器,都是LLVM compiler。

但目前來說,GCC相容性仍然是比較好,而且支援很多新的語言特性。像是Ruby的RVM目前就不支援 LLVM 編譯1.9.3之前的版本,只能用GCC。但很不幸地,目前Mac上很方便的套件工具 Homebrew 並不能直接安裝 GCC ,要用別的方式,詳見 
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/gcc.rb


MPC都沒有更新編不過,我不相信GCC會沒問題,所以就自力救濟,我的做法如下:
  1. 編譯GCC需要的GMPMPFRMPC
    brew install gmp mpfr
    如果沒有裝wget的朋友,建議也順便裝一下,指令比curl方便
    brew install wget
  2. 因為Homebrew的的 MPC版本過舊,直接安裝會失敗,得自己裝。
    wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
    tar xzf mpc-0.9.tar.gz
    cd mpc-0.9
    ./configure && make && sudo make install
  3. 編譯GCC
    wget http://ftp.twaren.net/Unix/GNU/gnu/gcc/gcc-4.7.0/gcc-4.7.0.tar.gz
    tar xzf gcc-4.7.0.tar.gz
    mkdir gccbuild && cd gccbuild
    ../gcc-4.7.0/configure --prefix=/usr/local/gcc #為了避免干擾現有的gcc
    make DESTDIR=/usr/local/gcc BOOT_CFLAGS='-O' bootstrap
    sudo make install
這樣會裝gcc、g++、gcj、gfortran,如果嫌不夠(或太多),可以參考GCC Configuration,加上 --enable-languages 的參數,自行增減語言。
編譯GCC要幾個小時,安裝完成後自己再建立link到 /usr/local就行了
sudo ln -s /usr/local/gcc/bin/gcc /usr/local/bin/gcc-4.7
sudo ln -s /usr/local/gcc/bin/g++ /usr/local/bin/g++-4.7
或是設定路徑
export PATH=/usr/local/gcc/bin:$PATH
如果是多人使用的"測試"伺服器,你也可以像rvm一樣裝在自己的目錄下,不過現在很少人用Mac Server,而且會裝GCC的朋友應該也是管理員等級了吧XD

2 則留言:

Kuo Kan Liang 提到...

您好,因為不想干擾系統本身原來安裝的 gcc(10.6.8),所以我照您所建議的把它安裝在 /usr/local/gcc (今天已經是用 4.8.0 了)。但是我並不了解 gcc 在 include 和 link 時的動作方式,所以會好奇:除了把 compiler 的 binary link 出去,或是在自己的 PATH 裡把它設到前頭之外, include path 和 link path 是否也要改?或是,我也想把設定寫在 Makefile 裡,以便把設定的問題全都集中處理。那麼,這 Makefile 裡有哪些一定要設的注意項目呢?
因為我是想要學習一些 C++11 裡的新功能,才會想要這樣弄,不想在 compiler 版本上混淆了。謝謝您提供的資料,也請您提示一下我的問題如何處理囉!多謝!

Tseng Teng-Yi 提到...

GCC和MSC不太一樣,通常是不用特別改 include path 和 link path ,建議你遇到問題再改。 如果遇到C++ 11的問題,得找 http://eplus.asia.edu.tw/assets/presentations/49/original/d41d8cd98f00b204e9800998ecf8427e.pdf 的作者王建興先生請教 :P