Boost 1.54.0のLogをMac 10.7 (Xcode 4)でつかう。
10.8、10.9でもXcode 4系なら多分同じ。
注意点は2つ
- clangでビルドする
- dylibを使う
clangでビルド
環境は次の通り
GCC(引数指定無し)でビルドすると、途中で失敗して、例えばlibboost_log_setup.dylibなどはバイナリすらできません。また、プロジェクトで使用しようとした場合、Boost.Logのヘッダファイルがコンパイルできず、リンクにすら到達しませんので、とにもかくにもclangでビルドします。
clangはXcodeのPreferences -> DownloadからCommand Line Toolsをインストールして、最新にしておきます。
clangでのビルドは次のとおり。
$ ./bootstrap.sh --with-toolset=clang $ ./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++" threading=multi --with-log
dylibでリンク
clangでビルドすれば、Boost.Logを使用したソースがコンパイルできますが、今度はリンク時にあらかた関数類が見当たらなくエラーとなります。
それで、いろいろ調べていたのですが、Boost.Testの記事でにたような内容を見まして、もしや...と試したら通りました。
Boost.Logなので、#defineはBOOST_LOG_DYN_LINK。
#define BOOST_LOG_DYN_LINK #include <boost/log/core.hpp> #include <boost/log/expressions.hpp> #include <boost/log/sinks.hpp> #include <boost/log/sinks/debug_output_backend.hpp> #include <boost/log/support/date_time.hpp> #include <boost/log/trivial.hpp> #include <boost/log/utility/empty_deleter.hpp> #include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/utility/setup/file.hpp>
ただ、Macでdylibを使うと、install_nameが問題になってくるので、こっちの記事に繋がる訳です。
Macでまったく使えないのかと焦りましたが、これでなんとかなりそうです。