我已经建立了自己的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
,但显然它确实被链接了。所以,我想学到的教训(像很多次一样)是永远不要假设,而是仔细阅读文档!
which clang
。现在,使用XCode clang,我只需要指定-std=c++11
。 - evading