2013-02-12 99 views
3

當我從Xcode4.6運行以下代碼片段時,它編譯並運行正常。但是當我嘗試使用命令行工具(clang ++)編譯它時,它不能這麼做。構建在xcode 4.6中,但使用命令行失敗

#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

嘗試'-std = C++ 11' – Pubby 2013-02-12 09:24:16

+0

是的,我也嘗試過。相同的結果。 – user2061170 2013-02-12 09:37:10

+0

'clang ++ -std = C++ 11'找不到'std :: unique_ptr'的定義,即使是'#include '也是如此。奇怪的編譯器。使用gcc。 – Walter 2013-02-12 09:47:32

回答

1

你可以看一下吧,看看Xcode中使用什麼命令行。

  1. 在Xcode中構建您的項目。
  2. 切換到日誌視圖。它的圖標看起來像是帶有幾條線的講話泡泡。
  3. 點擊最新版本。
  4. 構建步驟列表將顯示在主編輯區域。右鍵單擊「編譯main.cpp」,然後選擇「爲顯示的結果複製腳本」。
  5. 將其粘貼到您喜歡的文本編輯器中,查看Xcode用於構建項目的確切命令行。
+0

謝謝!這很有用。我有興趣瞭解xcode如何編譯和鏈接。但產出相當壓倒。它的巨大命令開始於 – user2061170 2013-02-13 06:48:56

+0

謝謝!這很有用。我有興趣瞭解xcode如何編譯和鏈接。但產出相當壓倒。它的巨大命令開始於「/Applications/xcode4.6/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x C++ -arch x86_64 -fmessage-length = 0 -std = gnu ++ 11 -stdlib = libC++ ...「,然後繼續從項目文件夾中包含很多東西。如果我爲我提取所需的東西並使用它,它會生成.o文件,但鏈接命令不會將其作爲有效文件接受。我會繼續嘗試。再次感謝。 – user2061170 2013-02-13 06:59:19

2

嘗試使用鐺自己的標準庫:

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

默認是GNU的標準庫(libstdc++),但蘋果包括的版本是很舊的和沒有C++ 11的支持。

+0

我在這裏寫下了這個問題:http://marshall.calepin.co/llvmclang-and-standard-libraries-on-mac-os-x.html – 2013-02-12 17:35:35

+0

謝謝!這是理想的工作。但不幸的是它不適合我,因此我嘗試了太多東西。 – user2061170 2013-02-13 07:00:31

0

謝謝大家爲我提出解決方案,讓我繼續前進。

最後,這是我的工作。

我卸載使用http://www.cocoanetics.com/2012/07/you-dont-need-the-xcode-command-line-tools/
提到的shell腳本的命令行工具,然後使用 $的Xcode選-switch /Applications/Xcode.app/Contents/Developer/ 設置的Xcode版本。最後使用 $ xcrun鏗鏘++ main1.cpp -stdlib = libC++

編譯我的代碼。

這工作得很好。謝謝!!

0

確保您爲編譯器鏈接器調用了clang++而不是clang

clang++(如編譯器)需要-std=c++11-stdlib=libc++編譯標誌和clang++(如接頭)需要-stdlib=libc++接頭標誌。

相關問題