【问题标题】:How to compile/link Boost with clang++/libc++?如何使用 clang++/libc++ 编译/链接 Boost?
【发布时间】: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++?

【问题讨论】:

    标签: c++ boost clang libc++


    【解决方案1】:

    我也不知道该怎么做。但是在heregetting startedtrial 中闲逛之后,出现错误:

    $ ./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吗?
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2019-07-10
    相关资源
    最近更新 更多