如何使用 clang++/libc++ 编译/链接 Boost?

Posted

技术标签:

【中文标题】如何使用 clang++/libc++ 编译/链接 Boost?【英文标题】:How to compile/link Boost with clang++/libc++? 【发布时间】:2012-01-19 03:23:21 【问题描述】:

Why can't clang with libc++ in c++0x mode link this boost::program_options example? 这个问题的答案指出“您需要使用 clang++ -stdlib=libc++ 重建 boost。”

我正在使用带有 clang v3.0 的 MacOS Lion。如何使用 clang 构建 Boost v1.48.0 并将其与 libc++ 链接?

更新:我创建了一个 user-config.jam 文件,其中包含以下内容:

using clang-darwin

...这将使用 clang 而不是 gcc 构建 Boost。如何链接 libc++ 而不是 libstdc++?

【问题讨论】:

【参考方案1】:

我也不知道该怎么做。但是在here、getting started 和trial 中闲逛之后,出现错误:

$ ./bootstrap --with-toolset=clang
$ ./b2 clean
$ ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"

您会收到很多警告。由于LWG 2059,信号库将无法构建。但除此之外,我认为它有效。

【讨论】:

补充一下,boost::signals2 (#include <boost/signals2.hpp>) 与 boost::signal 有类似的 API,并且只是标头,所以不能构建信号可能不是那么糟糕。跨度> 只是 boost::signal 没有建立起来吗?我认为构建完成时我缺少很多变体 没关系。我认为 boost 的引导程序由于某种原因没有找到 iconv 并导致它没有构建我的一些 boost 变体 这拯救了我的一天!最新的 Boost 1.62 with Apple LLVM ver 7.0.2 编译良好,没有警告。 请注意,根据自己的系统,可能还需要显式使用update-alternativesclang++ 配置别名(否则b2 找不到合适的工具集)。来自apt.llvm.org 的包不会自动设置这些别名。【参考方案2】:

另一种选择是使用Homebrew:

brew install boost --c++11

要获取有关所有选项的信息,请使用:

brew info boost

【讨论】:

此链接是否针对libc++ 而不是libstdc++ 如果 clang 可用,它与 libc++ 链接。 我运行“brew install boost --c++11”,然后运行“otool -L /usr/local/Cellar/boost/1.57.0/lib/libboost_regex-mt.dylib”并且可以确认 Boost 现在正在链接 libc++。谢谢! brew 的 boost 公式中的相关行 - github.com/Homebrew/homebrew/blob/c77a584/Library/Formula/… 这个有boost::mpl吗?

以上是关于如何使用 clang++/libc++ 编译/链接 Boost?的主要内容,如果未能解决你的问题,请参考以下文章

无法将 libc++ 与 clang++-5.0 一起使用

clang 命令

使用clang时在gdb中评估libc ++的方法

在 Windows 上使用 libc++?

如何使用自动工具编译带有 clang 和选项 -std=c++11 的项目

QtCreator:`clang:-stdlib=libc++ 的无效部署目标(需要 OS X 10.7 或更高版本)`