先日、メインの開発マシンであるMac miniにLionをクリーンインストールしました。周辺ツールも、Xcode4.2・MacPorts2.0の最新版をインストールして、開発環境も順調に作成していました。
よく使うportsはコンパイルまでに正常に終わり、あとはDatabaseへデータのリストアをすれば完了だなと思っていたら、postgreSQLがデータのリストア時にSegmentation Fault 11で落ちてしまいます。やばい、これが動かないと仕事が出来ない。
... Segmentation Fault 11 $
ちょっと焦りましたが、こういう時はgoogle先生に聞くのが一番です。ググってみるとMacPortsのバグトラッキングのページに「postgresql91 segfaults on OS X 10.7 when built with Xcode 4.2」と言う、今の状況そのまんまなバグ報告が見つかりました。
このバグ報告に付いているコメントをみると、「Xcode 4.2ではコンパイル時に/Developer/usr/bin/clangがデフォルトで使われるが、これが悪さをしているようなので/Developer/usr/bin/llvm-gcc-4.2を使った方が良い。」と書かれていたので、llvm-gcc-4.2を使ってコンパイルしてみます。
clangとはコンパイラのフロントエンドであり、llvmをバックエンドとして使用されるものらしいです。Xcode4になって、コンパイラがgccからllvmに移行したらしいので、他のポートでも色々不具合が出ているようです。
コンパイラをllvm-gcc-4.2に変更する方法は2つ有り、/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/databases/postgresql90/Portfileを変更する方法と、コマンドラインからコンパイラを指定する方法があります。Portfileを変更するより、コマンドラインから指定した方がお手軽なので、今回はコマンドラインで作業をしてみます。
コンパイラを変更するには下記のコマンドを実行します
$ sudo port -d install postgresql90 configure.compiler=llvm-gcc-4.2
configure.compilerには/opt/local/share/macports/Tcl/port1.0/portconfigure.tclに定義されている下記の文字列を指定できます(指定できても該当するコンパイラーがインストールされていないとエラーになりますよ。)
switch -exact ${configure.compiler} {
cc { set name "System cc" }
gcc { set name "System gcc" }
gcc-3.3 { set name "Mac OS X gcc 3.3" }
gcc-4.0 { set name "Mac OS X gcc 4.0" }
gcc-4.2 { set name "Mac OS X gcc 4.2" }
llvm-gcc-4.2 { set name "Mac OS X llvm-gcc 4.2" }
clang { set name "Mac OS X clang" }
apple-gcc-3.3 { set name "MacPorts Apple gcc 3.3" }
apple-gcc-4.0 { set name "MacPorts Apple gcc 4.0" }
apple-gcc-4.2 { set name "MacPorts Apple gcc 4.2" }
macports-gcc-4.0 { set name "MacPorts gcc 4.0" }
macports-gcc-4.1 { set name "MacPorts gcc 4.1" }
macports-gcc-4.2 { set name "MacPorts gcc 4.2" }
macports-gcc-4.3 { set name "MacPorts gcc 4.3" }
macports-gcc-4.4 { set name "MacPorts gcc 4.4" }
macports-gcc-4.5 { set name "MacPorts gcc 4.5" }
macports-gcc-4.6 { set name "MacPorts gcc 4.6" }
macports-llvm-gcc-4.2 { set name "MacPorts llvm-gcc 4.2" }
macports-clang { set name "MacPorts clang" }
default { return -code error "Invalid value for configure.compiler" }
}
ちなみに、コンパイルオプションを指定したい場合は、下記のようにconfigure.optflagsを追加します。
$ sudo port -d install postgresql90 configure.optflags="-O3 -pipe" configure.compiler=llvm-gcc-4.2
llvm-gcc-4.2でコンパイルしたpostgreSQLでリストアしたところ、無事に完了しました\(^O^)/ バグトラッキングでpatch fileも投稿されていたので、近々反映されるでしょう。
0 コメント:
コメントを投稿