我已经阅读了很多帖子,但我无法理解如何在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库以及如何编译链接它的应用程序。
答案 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_setup
和pthread
是合适的人选。)
有关链接boost库的更多信息,请参阅boost documentation。
答案 1 :(得分:0)
我可以为您提供Mac OS上我的CMakeLists的代码示例。它完全用于连接boost记录库:
target_link_libraries(testq boost_system boost_thread boost_log boost_log_setup pthread)