読者です 読者をやめる 読者になる 読者になる

kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

Boost 1.54.0のLogをMac 10.7 (Xcode 4)でつかう。

10.8、10.9でもXcode 4系なら多分同じ。

注意点は2つ

  • clangでビルドする
  • dylibを使う

clangでビルド

環境は次の通り

  • 10.7.5
  • Xcode 4.6.3
  • clang (Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)

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でまったく使えないのかと焦りましたが、これでなんとかなりそうです。