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

标签 c++ boost osx-mavericks

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

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

我已经下载了 boost 1.56.0 的 ZIP 压缩包, Bootstrap 是:

./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 库,以及如何编译链接它的应用程序。

最佳答案

在您的构建命令中,您指定了链接目录,但没有指定您将可执行文件链接到的库。将 -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 .

关于c++ - 在 OS X 10.9 上编译 Boost 并链接到自己的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467378/

相关文章:

c++ - 对 boost::smart_ptr 的引用指向对象并检查它们的有效性

macos - 终端中的未知名称作为用户名

macos - emacs - 每行的第一个字符从窗口末尾开始

c++ - 文件输出8192个字符后停止

c++ - 混合 C++ 和 Objective-C

c++ - 使用 GL_POLYGON 在 OpenGL 中绘制多边形时出现意外输出

c++ - 系统的boost::asio无限循环:第一次连接后出现9错误

IOS 模拟器与 Mavericks 速度较慢

c++ - new 和 delete char* 导致异常

c++ - 有什么方法可以知道目录是否包含子目录?