在xcode 4.6中构建,但使用命令行失败

时间:2013-02-12 09:21:11

标签: c++ macos clang xcode4.6

当我从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.

4 个答案:

答案 0 :(得分:2)

尝试使用clang自己的标准库:

clang -std=c++11 -stdlib=libc++ main.cpp

默认是GNU的标准库(libstdc++),但Apple包含的版本很旧,没有C ++ 11支持。

答案 1 :(得分:1)

您可以自己查看Xcode使用的命令行。

  1. 在Xcode中构建项目。
  2. 切换到日志视图。它的图标看起来像一个带有几行的对话泡泡。
  3. 点击最新版本。
  4. 构建步骤列表将显示在主编辑区域中。右键单击“编译main.cpp”并选择“复制已显示结果的脚本”。
  5. 将其粘贴到您喜欢的文本编辑器中,以查看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 链接器标志。