【问题标题】:How can I use XCode's libc++ with top-of-trunk clang?如何将 XCode 的 libc++ 与 top-of-trunk clang 一起使用?
【发布时间】:2013-09-13 18:22:57
【问题描述】:

编译这个文件时

#include <vector>

int main(int argc, char* argv[])
{
  std::vector<int> IntVector;
}

使用带有 Xcode 的 clang 版本,我可以告诉 clang 像这样使用 llvm 的 libc++:

$ clang -std=c++11 -stdlib=libc++ t.cpp -lc++ -o t

但是,当使用自建版本的clang时,这个命令不起作用,因为clang找不到libc++:

$ /my/clang -std=gnu++11 -stdlib=libc++ t.cpp -lc++ -o t
t.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
         ^
1 error generated.

我知道我可以从源代码下载、构建和安装 libc++;但是,我更愿意使用 Xcode 附带的版本。

在使用我自己的 clang 版本时,如何使用 Xcode 附带的 libc++ 版本?

【问题讨论】:

  • 首先,您可能想改用clang++。其次,你在构建 clang 的时候,有没有告诉它库头在哪里?
  • 另外还要指定开发的sysroot:clang++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
  • 这对找到 libc++ 有什么帮助?

标签: c++ xcode c++11 clang libc++


【解决方案1】:

首先确定 libc++ 的位置:它将位于 Xcode 应用程序本身内。如果您找不到它,请使用 Xcode 对 HelloWorld 进行预处理,并检查它以获取 std 标头的路径。

然后在您的命令行上使用-I 指向include 目录。您还可以使用-nostdinc++ 来保证不会查找其他标准头:

$ /my/clang -std=gnu++11 -stdlib=libc++ t.cpp -nostdinc++ -I<path-to-libcxx>/include

【讨论】:

  • 谢谢!那完成了工作。 Xcode 4 附带的版本似乎与 t-o-t clang 不兼容,导致某些头文件出现编译器错误。不过,Xcode 5 预览版的版本似乎可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2017-07-28
  • 2010-12-15
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2021-01-19
相关资源
最近更新 更多