在OS X 10.9上编译Boost并链接到自己的应用程序

时间:2014-08-23 23:53:16

标签: c++ boost osx-mavericks

我已经阅读了很多帖子,但我无法理解如何在OS X 10.9.4上编译boost库,以便在我的应用程序中静态链接它。

我安装了Xcode 5并安装了“命令行工具”。

我已经下载了boost 1.56.0的ZIP存档,引导程序为:

./bootstrap.sh --prefix=/Users/foo/dev/lib/boost_1_56_0 --libdir=/Users/foo/dev/lib/boost_1_56_0/lib

然后安装

./b2

但是当我尝试编译如下的小测试时:

#include <boost/log/trivial.hpp>

int main(int, char*[])
{
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";


  return 0;
}

使用:

clang logtest.cpp -I /Users/foo/lib/boost_1_56_0/include -L /Users/foo/lib/boost_1_56_0/lib

关于链接我遇到了很多错误:

Undefined symbols for architecture x86_64: 
"boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", referenced from:
  boost::log::v2s_mt_posix::record::reset() in logtest-d5345b.o
...

所以我也尝试在bootstrap中添加以下参数:

cxxflags="-arch i386 -arch x86_64" address-model=32_64 threading=multi macos-version=10.9 stage

以下是b2:

threading=multi link=static runtime-link=static cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"

但没有改变......

所以我正在寻找一本指南,教我如何从头编译boost库以及如何编译链接它的应用程序

2 个答案:

答案 0 :(得分:2)

在构建命令中,您指定了链接目录,但没有指定链接可执行文件的库。将-llibrary-name添加到命令中。我相信它应该是

clang logtest.cpp -I /Users/foo/lib/boost_1_56_0/include -L /Users/foo/lib/boost_1_56_0/lib -lboost_log

也许,添加其他库boost_log取决于(boost_log_setuppthread是合适的人选。)

有关链接boost库的更多信息,请参阅boost documentation

答案 1 :(得分:0)

我可以为您提供Mac OS上我的CMakeLists的代码示例。它完全用于连接boost记录库:

target_link_libraries(testq boost_system boost_thread boost_log boost_log_setup pthread)