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. ビルドステップのリストがメインの編集エリアに表示されます。「Compilemain.cpp」を右クリックし、「表示された結果のトランスクリプトをコピー」を選択します。
  5. これをお気に入りのテキストエディタに貼り付けて、Xcodeがプロジェクトのビルドに使用した正確なコマンドラインを確認します。
于 2013-02-12T12:46:56.380 に答える
0

私を動かし続けた解決策を提案してくれたみんなに感謝します。

最後に、これは私のために働いたものです。

http://www.cocoanetics.com/2012/07/you-dont-need-the-xcode-command-line-tools/に記載されているシェルスクリプトを使用してコマンドラインツールをアンインストールして
から、$ xcode-select-switch/を使用しました。アプリケーション/Xcode.app/Contents/Developer/でxcodeバージョンを設定します。そして最後に$xcrunclang ++ 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 に答える