当前位置: 首页 > 知识库问答 >
问题:

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

贺高杰
2023-03-14

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

共有3个答案

凌蕴藉
2023-03-14

确保为编译器和链接器调用的是clang,而不是clang

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

慕容耘豪
2023-03-14

您可以亲自查看命令行Xcode使用了什么。

  1. 在Xcode中构建您的项目。
  2. 切换到日志视图。它的图标看起来像一个带有几行的语音气泡。
  3. 点击最新版本。
  4. 构建步骤的列表将显示在主编辑区域中。右键单击“编译main.cpp”并选择“复制成绩单以显示结果”。
  5. 将其粘贴到您最喜欢的文本编辑器中,以查看Xcode用于构建您的项目的确切命令行。
仲智
2023-03-14

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

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

默认是GNU的标准库(< code>libstdc ),但是苹果附带的版本相当旧,不支持C 11。

 类似资料:
  • 默认情况下, 只要有任务调用失败, Gradle就会中断执行. 这可能会使调用过程更快, 但那些后面隐藏的错误就没有办法发现了. 所以你可以使用 --continue 选项在一次调用中尽可能多的发现所有问题. 采用 --continue 选项, Gralde 会调用每一个任务以及它们依赖的任务. 而不是一旦出现错误就会中断执行.所有错误信息都会在最后被列出来. 一旦某个任务执行失败,那么所有依赖于

  • 我试图生成和测试我的代码(如果有效)的cucumber - Maven报告,然后打开命令提示符。我尝试过“mvn干净”,这是构建成功。之后,我尝试了“mvn安装”并遇到了构建失败(显示错误)。 这是我的pom.xml:

  • 有人能帮我解决这个错误吗? 我把ADS放在我的项目中,当我尝试将我的项目构建到Android时,我得到了这个错误。 但是,如果我将ADS脱机,那么错误就会消失。 命令调用失败:Gradle 构建失败。C:/Program Files/Java/jdk1.8.0_45\bin\java.exe -classpath “E:\unity 5\Editor\Data\PlaybackEngines\An

  • 问题内容: 命令 : 下面的Dockerfile: 在最后一行失败(./configure …) 如果我删除了最后一行并在容器中运行了bash,然后手动执行了最后一行,那么它将起作用。 我希望将命令添加到Dockerfile中(由RUN前缀)后,在容器中成功运行的任何命令都应该起作用 我错过了什么吗? 问题答案: pwd在RUN命令中不是持久的。您需要在同一RUN中进行cd和配置。 这个Docke

  • 我正在做一个对我来说很新的项目,但已经有一段时间了。

  • 当我在命令行中运行TestNG时,抛出异常: c:\test>java org.testng.testng testng.xml线程“main”java.lang.noClassDefounderror:com/beust/jcommander/parameterexception在java.lang.class.getDeclaredMethods0(本机方法)在java.lang.class.