3

当我从 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 版本 4.2 (clang-425.0.24) (基于 LLVM 3.2svn)
目标:x86_64-apple-darwin12.2.0
线程模型: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:错误:命名空间“std”中没有名为“unique_ptr”的成员
    std::unique_ptr foo(new int(0));
    ~~~~~^
main.cpp:7:24: 错误:对于函数式强制转换或类型构造,预期为 '('
    std::unique_ptr foo(new int(0));
                    ~~~^
main.cpp:7:26:错误:使用未声明的标识符“foo”
    std::unique_ptr foo(new int(0));
                         ^
产生 3 个错误。
4

4 回答 4

2

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

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

默认是 GNU 的标准库 ( libstdc++),但 Apple 包含的版本相当旧,并且不支持 C++11。

于 2013-02-12T13:07:04.967 回答
1

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

  1. 在 Xcode 中构建您的项目。
  2. 切换到日志视图。它的图标看起来像一个气泡,里面有几行。
  3. 单击最新版本。
  4. 构建步骤列表将显示在主编辑区域中。右键单击“编译 main.cpp”并选择“复制成绩单以显示结果”。
  5. 将其粘贴到您最喜欢的文本编辑器中,以查看 Xcode 用于构建项目的确切命令行。
于 2013-02-12T12:46:56.380 回答
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++

编译我的代码。

这工作得很好。谢谢!!

于 2013-02-13T09:39:59.470 回答
0

确保您正在为编译器链接器调用clang++,而不是。clang

clang++(作为编译器)需要-std=c++11-stdlib=libc++ 编译器标志,并且clang++(作为链接器)需要-stdlib=libc++ 链接器标志。

于 2013-07-17T00:50:22.060 回答