如何使用 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-alternatives
为clang++
配置别名(否则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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自动工具编译带有 clang 和选项 -std=c++11 的项目
QtCreator:`clang:-stdlib=libc++ 的无效部署目标(需要 OS X 10.7 或更高版本)`