当我从Xcode4.6运行以下代码片段时,它编译并运行正常。但是当我尝试使用命令行工具(clang ++)编译它时,它无法这样做。
#include <iostream>
#include <memory>
int main(int argc, const char * argv[])
{
std::unique_ptr<int> foo(new int(0));
// insert code here...
std::cout << "Hello, this is cool giri World!\n";
return 0;
}
这是编译日志:
$ clang --version Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) Target: x86_64-apple-darwin12.2.0 Thread model: posix $ clang++ main.cpp -stdlib=libc++ -I /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/ -I /usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/include/ main.cpp:7:10: error: no member named 'unique_ptr' in namespace 'std' std::unique_ptr foo(new int(0)); ~~~~~^ main.cpp:7:24: error: expected '(' for function-style cast or type construction std::unique_ptr foo(new int(0)); ~~~^ main.cpp:7:26: error: use of undeclared identifier 'foo' std::unique_ptr foo(new int(0)); ^ 3 errors generated.
答案 0 :(得分:2)
尝试使用clang自己的标准库:
clang -std=c++11 -stdlib=libc++ main.cpp
默认是GNU的标准库(libstdc++
),但Apple包含的版本很旧,没有C ++ 11支持。
答案 1 :(得分:1)
您可以自己查看Xcode使用的命令行。
答案 2 :(得分:0)
感谢大家向我提出解决方案,让我继续前进。
最后这对我有用。
我使用http://www.cocoanetics.com/2012/07/you-dont-need-the-xcode-command-line-tools/中提到的shell脚本卸载了命令行工具 然后用 $ xcode-select -switch /Applications/Xcode.app/Contents/Developer/ 设置xcode版本。并最终使用 $ xcrun clang ++ main1.cpp -stdlib = libc ++
编译我的代码。
这很好用。谢谢!
答案 3 :(得分:0)
确保为编译器和链接器调用clang++
,而不是clang
。
clang++
(作为编译器)需要-std=c++11
和-stdlib=libc++
编译器标志,而clang++
(作为链接器)需要{{1 链接器标志。