b2でビルドしたBoost 1.57のStatic Link Libraryのboost::unit_test_frameworkをYosemiteで実行するとSegfaultが起きたので、メインコードのMakefileの-mmacosx-version-min=10.4を-mmacosx-version-min=10.9にすると動作するようになりました。

どうやら、Mac OS 10.6までをターゲットにビルドするとlibstdc++が使用され、Mac OS 10.7以降をターゲットにビルドするとlibc++が使用されるようです。libc++でC++11対応が入ったようですね。

Does homebrew use the option '-c++11' to mean '-stdlib=libc++'?

Xcode6でBoostをビルドすると、デフォルトでlibc++が使用されますが、メインコードで-mmacosx-version-min=10.4を指定するとlibstdc++が使用され、C++の例外周りのABIの互換性の問題か何かで、Segfaultが起きているようです。

リンクまで問題なく通ってしまうので、原因の把握にわりと時間がかかってしまいました。以下のように、メインコードと合わせて、Boostを-mmacosx-version-min=10.4でビルドすると、Segfaultは解消しました。


./b2 clean link=static threading=multi address-model=32_64 --layout=tagged cflags="-mmacosx-version-min=10.4" cxxflags="-mmacosx-version-min=10.4"
./b2 install link=static threading=multi address-model=32_64 --layout=tagged cflags="-mmacosx-version-min=10.4" cxxflags="-mmacosx-version-min=10.4"


また、リンク時は、-mmacosx-version-min=10.4だけだと、libc++とlibstdc++の両方がリンクされてしまうため、-stdlib=libstdc++を追加する必要があるようです。


-mmacosx-version-min=10.4 -stdlib=libstdc++


dylibの依存関係はotool -l hoge.dylibで確認できます。