ローカルで使うなら MacPorts の gcc47 とか gcc48 を使うのが簡単。というかそもそも 10.6 ではまだ GCC 4.2 があるのであまり使う機会はないかもしれない。
今回 GCC をビルドしようと思ったのは MacPorts の GCC をインストールすると libstdc++6.dylib が別途インストールされ、システムに存在する /usr/lib/libstdc++.6.dylib と相性が悪かったから。
もう少し具体的に書くと RawTherapee を OpenMP 有りでビルドしようとすると GCC 4.5 以上が必要(というかそもそも auto_ptr.h が必要なわけで)で、ビルドそのものは出来るけど実行する際に GTK+ で使われている libclearlooks.so が /opt/local/lib/libstdc++.6.dylib の後に依存関係で /usr/lib/libstdc++.6.dylib を呼び出してしまい RawTherapee がクラッシュする。ld に /usr/lib/libstdc++.6.dylib を優先して渡したり、DYLD_LIBRARY_PATH による誘導で対応できるけど他の部分に影響が出ることがある。
m4、autoconf、automake、libtool、pkg-config などは最近のものをすでにインストール済みでの状態です。最近の GCC は依存関係を GCC のソースディレクトリに入れておくと勝手にビルドしてくれるみたいですが個別にビルドしています。
環境変数
ヘッダーとライブラリの検索パスのルートを変更していますが自分の環境だけで使用するのであればなくても大丈夫だと思います。コンパイラはビルドに失敗しないものを適当に選んで下さい。
# インストール先用の変数 prefix=/usr/local triple=x86_64-apple-darwin$(uname -r) configure_args="--prefix=$prefix --build=$triple" # 環境変数 export MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion | cut -d. -f-2) export SDKROOT=$(xcodebuild -version -sdk macosx$MACOSX_DEPLOYMENT_TARGET | sed -n '/^Path: /s///p') export CC=$(xcrun -find gcc-4.2) export CXX=$(xcrun -find g++-4.2) export CFLAGS="-pipe -O3 -march=core2 -mtune=core2 -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET export CXXFLAGS="$CFLAGS" export CPPFLAGS="-isysroot $SDKROOT -I$prefix/include" export LDFLAGS="-Wl,-syslibroot,$SDKROOT -L$prefix/lib"
※MacBook Air の場合 uname
が i386
で、configure 時に i386-apple-darwin
と認識されることがあるので --build=x86_64-apple-darwin
としています。
GMP 5.1.1
--enable-cxx
を必ず追加。
tar -xf gmp-5.1.1.tar.bz2 cd gmp-5.1.1 ./configure --prefix=$prefix --enable-cxx ABI=64 make make check make install
GMP (Mercurial)
GMP のリポジトリは2つあり、gmp と gmp-5.1 があります。
- unstable:http://gmplib.org:8000/gmp
- 5.1 patch level:http://gmplib.org:8000/gmp-5.1
hg clone http://gmplib.org:8000/gmp-5.1 gmp-5.1 cd gmp-5.1
そのままビルドしようとすると最後に version.texi が無いというエラーになるので .bootstrap
を実行するか自分で作成します。version.texi の内容は .bootstrap にヒアドキュメントで記載されているのでそれを抜き出せばいいだけです。
# 自動生成 sh .bootstrap # 手動生成 sed -n '/^@set/p' /usr/local/src/repos/gmp-5.1/.bootstrap > doc/version.texi
.bootstrap の実行だけでいいような気がしますが、うまくビルドできない場合は autoreconf するといいかもしれません。
autoreconf -i
これ以降は tarball 版と同じです。
MPFR 3.1.2
tar -xf mpfr-3.1.2.tar.bz2 cd mpfr-3.1.2 ./configure $configure_args make make check make install
MPC 1.0.1
tar -xf mpc-1.0.1.tar.gz cd mpc-1.0.1 ./configure $configure_args make make check make install
ISL 0.11.2
tar -xf isl-0.11.2.tar.bz2 cd isl-0.11.2 ./configure $configure_args make make check make install
Cloog 0.18.0
tar xf cloog-0.18.0.tar.gz cd cloog-0.18.0 ./configure $configure_args make make check make install
GCC 4.8 (Git)
--disable-multilib
を忘れると無理矢理 i386 のビルドをしようとします。- PPL ありの場合は最近のものだとバージョンが合わないので
--disable-ppl-version-check
が必要かも。 - ここではインストール先を
/usr/local/gcc48
、ファイル名を***-4.8
にしています。
git clone git://gcc.gnu.org/git/gcc.git cd gcc git checkout -f gcc-4_8-branch cd - mkdir build cd build ../gcc/configure \ --prefix=$prefix/gcc48 \ --build=$triple \ --program-suffix=-4.8 \ --enable-languages=c,c++,fortran,lto,objc,obj-c++,java \ --enable-lto \ --enable-libstdcxx-time \ --disable-multilib \ --disable-nls \ --disable-bootstrap \ --with-{gmp,mpfr,mpc,isl,cloog}=$prefix \ --enable-cloog-backend=isl \ --disable-{cloog,isl}-version-check make make install