2013-01-01 19 views
22

C++ 11 <thread> üstbilgisine dayanan aşağıdaki C++ programını derlemeye çalışıyorum. Bunu OSX Lion'da yapmaya çalışıyorum.OSX aslanında C++ 11 ile clang 3.2 nasıl derlenir?

#include <iostream> 
#include <thread> 
#include <vector> 

void hello() 
{ 
    std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl; 
} 

int main() 
{ 
    std::vector<std::thread> threads; 

    for(int i = 0; i < 5; i++) 
    { 
     threads.push_back(std::thread(hello)); 
    } 

    for(auto& thread: threads) 
    { 
     thread.join(); 
    } 

    return 0; 
} 

Yukarıdaki program, homebrew paket yöneticisini kullanarak kurduğum g ++ 4.7 ile iyi bir şekilde derlenmiştir. clang 3.2 ile yukarıdaki programı derlemeye çalışırken Ancak aşağıdaki hata mesajı alıyorum (ayrıca homebrewleri paket yöneticisini kullanarak yüklü): <thread> başlığını bulamıyorum

Zameers-MacBook-Air:tmp zmanji$ clang++ -v -std=c++11 test.cpp 
clang version 3.2 (tags/RELEASE_32/final) 
Target: x86_64-apple-darwin11.3.0 
Thread model: posix 
"/usr/local/Cellar/llvm/3.2/bin/clang" -cc1 -triple x86_64-apple-macosx10.7.0 -emit-obj -mrelax-all -disable-free -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 128.2 -v -resource-dir /usr/local/Cellar/llvm/3.2/bin/../lib/clang/3.2 -fmodule-cache-path /var/folders/qf/j_7_sw0n093gn1y0mtsyztxh0000gn/T/clang-module-cache -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/zmanji/tmp -ferror-limit 19 -fmessage-length 101 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.7.0 -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/qf/j_7_sw0n093gn1y0mtsyztxh0000gn/T/test-Zkjucl.o -x c++ test.cpp 
clang -cc1 version 3.2 based upon LLVM 3.2svn default target x86_64-apple-darwin11.3.0 
ignoring nonexistent directory "/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64" 
ignoring nonexistent directory "/usr/include/c++/4.0.0" 
ignoring nonexistent directory "/usr/include/c++/4.0.0/i686-apple-darwin8/" 
ignoring nonexistent directory "/usr/include/c++/4.0.0/backward" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/include/c++/4.2.1 
/usr/include/c++/4.2.1/backward 
/usr/local/include 
/usr/local/Cellar/llvm/3.2/bin/../lib/clang/3.2/include 
/usr/include 
/System/Library/Frameworks (framework directory) 
/Library/Frameworks (framework directory) 
End of search list. 
test.cpp:2:10: fatal error: 'thread' file not found 
#include <thread> 
     ^
1 error generated. 

O çınlama gibi görünüyor ama neden emin değilim.

Düzenleme

: aşağıda sharth cevabını çalıştı ve şimdi <iostream> başlık var olmadığını hatası alıyorum.

Zameers-MacBook-Air:tmp zmanji$ clang++ -v -std=c++11 -stdlib=libc++ test.cpp 
clang version 3.2 (tags/RELEASE_32/final) 
Target: x86_64-apple-darwin11.3.0 
Thread model: posix 
"/usr/local/Cellar/llvm/3.2/bin/clang" -cc1 -triple x86_64-apple-macosx10.7.0 -emit-obj -mrelax-all -disable-free -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 128.2 -v -resource-dir /usr/local/Cellar/llvm/3.2/bin/../lib/clang/3.2 -fmodule-cache-path /var/folders/qf/j_7_sw0n093gn1y0mtsyztxh0000gn/T/clang-module-cache -stdlib=libc++ -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/zmanji/tmp -ferror-limit 19 -fmessage-length 203 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.7.0 -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/qf/j_7_sw0n093gn1y0mtsyztxh0000gn/T/test-k2Alf4.o -x c++ test.cpp 
clang -cc1 version 3.2 based upon LLVM 3.2svn default target x86_64-apple-darwin11.3.0 
ignoring nonexistent directory "/usr/local/Cellar/llvm/3.2/bin/../lib/c++/v1" 
ignoring nonexistent directory "/usr/include/c++/v1" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/local/include 
/usr/local/Cellar/llvm/3.2/bin/../lib/clang/3.2/include 
/usr/include 
/System/Library/Frameworks (framework directory) 
/Library/Frameworks (framework directory) 
End of search list. 
test.cpp:1:10: fatal error: 'iostream' file not found 
#include <iostream> 
     ^
1 error generated. 
+0

Ben '' -pthread' ve inanmak -std = C++ Bu benim için çalışmaz 11' – Rapptz

cevap

43

Sen libc++ yerine libstdc++ kullanmak gerekir.

clang++ -std=c++11 -stdlib=libc++ foo.cc 
+0

. Şu anda aldığım hata mesajındaki düzenlememe bakın. –

+3

Sistem clang'ı kullanmıyorsunuz, homebrew argo kullanıyorsunuz. Herhangi bir sebepten dolayı, libC++ dosyasını linux üzerine kurmayı önerdikleri yer olan/usr/include/C++/v1 adresinde bulabilirsiniz. OS X'de, sistem clang'in nerede görüneceği/usr/lib/C++/v1 dizininde depolanır. –

+0

Evet, yorumumda bahsettim. LibC++ ve homebrew clang kullanamaz mıyım? –