C Programer  - 讨论区

标题:使用clang编译C++程序

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的更多资料可以参考:

http://clang.llvm.org/

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号