Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compile C++11 with clang 3.2 on OSX lion?

Tags:

I am trying to compile the following C++ program which relies on the C++11 <thread> header. I am trying to do this on 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; } 

The above program compiles fine with g++ 4.7 which I installed using the homebrew package manager. However when trying to compile the above program with clang 3.2 (also installed using the homebrew package manager) I get the following error message:

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. 

It seems that clang cannot find the <thread> header but I am not sure why.

Edit: I tried sharth's answer below and now I am getting the error that the <iostream> header does not exist.

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. 
like image 430
Zameer Manji Avatar asked Jan 01 '13 23:01

Zameer Manji


People also ask

How do I enable C ++ 11 in Clang?

To activate C++11, you have to add -std=c++11 in your clang calls, like for gcc. If you use an IDE that is clang-aware or gcc-aware, there is a specific project settings option available to do that.

How do you compile with Clang in terminal?

2.4. To compile a C++ program on the command line, run the clang++ compiler as follows: $ scl enable llvm-toolset-6.0 'clang++ -o output_file source_file ...' This creates a binary file named output_file in the current working directory. If the -o option is omitted, the clang++ compiler creates a file named a.

What version of C does Clang use?

Clang is C++14 feature complete.


1 Answers

You need to use libc++ instead of libstdc++.

clang++ -std=c++11 -stdlib=libc++ foo.cc 
like image 103
Bill Lynch Avatar answered Oct 16 '22 06:10

Bill Lynch