2014年01月21日 星期二 17:24
clang是基于llvm的C、C++编译器组件,在很久之前,就已经是Mac OS X的默认编译器,大家在iPhone上运行的App,大多都是clang编译器的结果。在FreeBSD 10版本中,clang已经替代了gcc作为默认编译器。目前FreeBSD 10携带的clang是3.3版本。
clang的最新版本完整的支持C++11标准,并且已经部分支持C++的未来标准C++1y。
clang的编译选项大部分和gcc相同,下面举例如何在FreeBSD 10环境中编译C++程序。
代码示例 :
#include <iostream> #include <thread> #include <vector> #include <chrono> using namespace std; using namespace std::this_thread; void func1(int start) { for(int i=start;i<start+5;i++) { cout << get_id() << ":" << i << endl; sleep_for(chrono::seconds(1)); } } int main(int argc,char **argv) { auto n=thread::hardware_concurrency(); cout << "hardware concurrency: " << n << endl; cout << "main thread id: " << get_id() << endl; thread d(func1,1000); d.detach(); vector<thread*> threads; for(unsigned int i=0;i<2*n;i++) { threads.push_back(new thread(func1,i*10)); } for(auto x : threads) { x->join(); } sleep_for(chrono::seconds(1)); return 0; }
编译指令:
#clang++ -o thread thread.cpp -std=c++11 -lpthread
编译后的文件解析:
# ldd ./thread
./thread:
libthr.so.3 => /lib/libthr.so.3 (0x800821000)
libc++.so.1 => /usr/lib/libc++.so.1 (0x800a46000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x800d01000)
libm.so.5 => /lib/libm.so.5 (0x800f1b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x801141000)
libc.so.7 => /lib/libc.so.7 (0x80134e000)
从上面可以看出,clang编译后的程序,已经不再使用libstdc++,而是libc++,libc++也是llvm旗下的一个项目,重新实现了C++标准库。
关于clang的更多资料可以参考:
Zeuux © 2024
京ICP备05028076号