先日、メインの開発マシンである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 コメント:
コメントを投稿