在OS X中,libc++在哪里?

5

我已经建立了自己的libc++,通常使用-I /path/to/lib/include -L /path/to/lib/lib来引用它。但现在我需要与一个使用Mac的人共享一个项目,并且我想给他们一个可以“即插即用”的Makefile™。

请考虑以下程序:

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
    uint32_t nums[100];

    for (size_t i = 0; i < 10; ++i)
    {
        nums[i] = 666;
    }

    vector<int> hello{1, 2, 3, 4, 5, 6, 7, 8};
    for_each(hello.begin(), hello.end(), [](int tal)
    {
        cout << tal << endl;
    });
}

当我使用clang++ -o test test.cc编译它时,自然会出现与缺少-std=c++11标志有关的错误。好的,那么让我们添加它 clang++ -std=c++11 -o test test.cc。这样做会产生几个错误之一是

test.cc:15:17: error: no matching constructor for initialization of 'vector<int>'
vector<int> hello{1, 2, 3, 4, 5, 6, 7, 8};

好的,我需要一个能够支持C++11的C++库。

clang++ -std=c++11 -stdlib=libc++ -o test test.cc 
test.cc:1:10: fatal error: 'algorithm' file not found
#include <algorithm>

我的解决方案是使用-I-L指向我手动编译的libc++。假设我要分享这个解决方案的人没有那个库,但至少有XCode。我该怎么做才能使上面的代码编译?毫无疑问,OS X必须具备C++11的功能吧?[编辑]事实证明,由于我使用homebrew从xcode安装了llvm,所以当我执行which clang时clang就会出现。我认为来自homebrew的clang不会被符号链接到/usr/local/bin,但显然它确实被链接了。所以,我想学到的教训(像很多次一样)是永远不要假设,而是仔细阅读文档!

根据OSX版本,libstdc++的支持程度可能会有所不同,其中一些C++11特性可能尚未完全可用,即使在最新版本中也是如此。 - Jesus Ramos
这段代码在最新的XCode (4.6.1)上编译很干净,在Mountain Lion (clang-425.0.27)上安装了命令行工具。 - Anya Shenanigans
@Petesh 奇怪,我有Mountain Lion系统,是两天前全新安装的,并且安装了最新的XCode和命令行工具... 你使用什么样的标志来进行编译? - evading
@Petesh 结果发现并不奇怪。当我认为我在使用XCode clang时,我实际上在使用Homebrew clang。应该像接受的解决方案建议的那样执行 which clang。现在,使用XCode clang,我只需要指定 -std=c++11 - evading
2个回答

6
最近的Xcode版本将clang和libc++头文件都放在Xcode.app里。您可以控制点击它并选择“显示包内容”来进入此目录。
请确保您的命令行clang是与您Xcode.app中的相同版本:
```bash $ xcrun --toolchain XcodeDefault -f clang ```
$ which clang++

对于我来说:

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/clang++ 

并且:

/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/lib/c++/v1

成功了!我早该知道要运行which clang...原来Homebrew的clang是被找到的。在Xcode.app中使用clang...问题解决了。谢谢! - evading

0

OS X El Capitan 10.11.6 (15G1004)

操作系统 X El Capitan 10.11.6 (15G1004)

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接