2013-01-01 12 views
22

Sto provando a compilare il seguente programma C++ che si basa sull'intestazione C++ 11 <thread>. Sto cercando di farlo su OSX Lion.Come compilare C++ 11 con clang 3.2 su OSX lion?

#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; 
} 

Il programma di cui sopra si compila bene con g ++ 4.7 che ho installato utilizzando il gestore di pacchetti homebrew. Tuttavia quando si cerca di compilare il programma di cui sopra con clangore 3.2 (installato anche utilizzando il gestore di pacchetti homebrew) ottengo il seguente messaggio di errore:

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. 

Sembra che clang non riesce a trovare l'intestazione <thread>, ma non sono sicuro perché.

Edit: ho cercato la risposta di sharth qui sotto e ora sto ottenendo l'errore che l'intestazione <iostream> non esiste.

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

Credo che sia '-pthread' e' -std = C++ 11' – Rapptz

risposta

43

è necessario utilizzare libc++ invece di libstdc++.

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

Questo non funziona per me. Vedi la mia modifica per il messaggio di errore che sto ricevendo ora. –

+3

Non si sta utilizzando il clang del sistema, si sta utilizzando il clang homebrew. Per qualche ragione, sta cercando libC++ in/usr/include/C++/v1, che è la posizione che raccomandano per installarlo su linux. Su OS X, è memorizzato in/usr/lib/C++/v1, che è dove dovrebbe apparire il clang del sistema. –

+0

Sì, ho detto che nel mio commento. Non posso usare libC++ e homebrew clang? –