【问题标题】:When is libc++ sources needed when building Clang from sources?从源代码构建 Clang 时何时需要 libc++ 源代码?
【发布时间】:2015-03-04 22:38:44
【问题描述】:

多年来,我一直在 Linux 和 OS X 上构建 Clang。来自 LLVM Download page,我一直使用以下来源:

  • LLVM(LLVM 源)
  • 编译器前端(Clang 源)
  • 编译器 RT(运行时源)
  • 编译器工具(工具额外来源)

我用来下载、构建和安装 Clang 3.5 的配方可以在 Clang 3.5 download, build and install script 找到。

它在 OS X 10.7 和 10.8 上运行良好,而且我从来不需要 OS X 10.7.x 或 10.8.x 上的 libc++ 设备(现在大约是 2010 年左右)。

问题:什么时候需要 libc++ 和 libc++ ABI 源?


我正在尝试帮助解决无法在 OS X 10.9 上编译简单 C++“Hello World”程序的问题。 Clang 3.5 安装在 /usr/local 中(就像其他人一样),但它无法找到标题(如 <iostream>)并且它在链接期间遇到未定义的符号(如 "std::ostream::operator<<(std::ostream& (*)(std::ostream&))")。

我想知道 10.7 和 10.8 是否具有以前版本的 Clang 所期望的头文件和库,但 10.9 需要构建和安装它们。

问题:这是缺少 libc++ 和 libc++ ABI 的症状吗?

【问题讨论】:

  • 不,您的自编译 clang 找不到标头,因为其他系统包含的标头目录(由 -cxx-isystem 指定)未正确配置。您可以使用clang++ -E -x c++ /dev/null -v 查找clang 搜索的目录,并查找它们是否包含iostream 之类的标头。如果没有,您可能需要导出 CPLUS_INCLUDE_PATH 以包含其他目录。您可以使用上述内置 clang(/usr/bin/clang) 的命令获取包含标头的位置。
  • libc++ 是 GNU/Linux 上 libstdc++ 的对应物,提供核心 c++ 标准库的实现。
  • 谢谢@Hongxu。是的,我知道 libc++ 是什么。我想知道是否/何时需要。我认为它一直都需要在 Linux 上;并且它在 OS X 上不需要。如果我正确阅读 "libc++" C++ Standard Library(我可能不会这样做,因为即使我在树内构建,我也无法让 make cxx 工作)。
  • @Hongxu - "...您可能需要导出 CPLUS_INCLUDE_PATH 以包含其他目录" - 所以我很清楚:我会将 CPLUS_INCLUDE_PATH 导出到标头在 10.9 系统上,然后启动 Clang/LLVM 构建?
  • @Hongxu - 我想我需要对此进行更多阅读......我的信息太少,无法提供帮助,但信息太多,所以我很危险。有趣的是它是如何工作的......

标签: c++ macos clang llvm libc++


【解决方案1】:

您应该在构建/安装 clang 时检查 libc++ 源代码,以便您还可以安装 C++ STL。

如果您的系统上没有 libc++ 运行时,您应该检出并安装 libc++abi 和 libc++,它们可以独立完成,并且独立于它们在 llvm/clang 安装中的检出。

作为参考,我建议您查看 MacPorts 中的 libcxxabi、libcxx、libunwind 和 llvm-X.Y 端口,它们展示了我如何配置这些项目以通过 Yosemite 在 Leopard 上构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 2016-04-13
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多