【发布时间】: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++