LLVM的最新版本3.3終於在6月17日發佈了,按以前的計劃6月5日就應該發佈了,不過畢竟沒有太晚,趕在VS2013 preview(6月26日微軟Build大會)以前出來了。加上以前gcc4.8.1在5月底6月初發布,當今最優秀的三大C++編譯器都在這個月發佈重要更新,這個6月份真是C++的好日子啊!html
LLVM以前就已經宣佈作到C++11 Feature Complete了,3.3應該是第一個穩定版,以前gcc4.8.1也一樣是全面支持C++11,這篇文章介紹瞭如何在CentOS上編譯安裝最新的gcc,VS一直是落後不少的,不過仍是很期待VS2013 preview中能增長多少C++11特性。linux
LLVM3.3提供了很是豐富的Pre-built Binaries:包括Ubuntu13.04,Ubuntu12.04和Ubuntu10.04,還有Debian六、FreeBSD9和Fedora18,固然還有Apple本身的Mac OS X了。只惋惜沒有給CentOS也提供預編譯版本,只能本身編譯安裝了。c++
今天在CentOS上將最新版本的LLVM套件(LLVM,Clang和Libc++)編譯安裝好了,中間遇到了很多問題。雖然已經有不少博客介紹如何編譯安裝LLVM了,可是根據我本身親身體驗的狀況來看,仍是有地方須要注意的,也有東西值得跟你們分享一下。shell
安裝過程主要參考這幾篇文章:ui
http://clang.llvm.org/get_started.htmlthis
http://www.cnblogs.com/Frandy/archive/2012/10/20/llvm_clang_libcxx_cxx11.htmlgoogle
http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.htmlspa
下面開始:code
首先,從http://llvm.org/releases/download.html#3.3這邊下載最新的版本。若是從SVN下載代碼的話,已是3.4的開發版本了,若是須要使用穩定版本,推薦本身下載3.3的代碼包,須要下載5個文件:htm
下載好了之後,四個壓縮包都解壓出來,獲得四個目錄:
llvm-3.3.src
cfe-3.3.src
clang-tools-extra-3.3.src
compiler-rt-3.3.src
libcxx-3.3.src
而後按下面的步驟組織:
mv cfe-3.3.src clang mv clang/ llvm-3.3.src/tools/ mv clang-tools-extra-3.3.src extra mv extra/ llvm-3.3.src/tools/clang/ mv compiler-rt-3.3.src compiler-rt mv compiler-rt llvm-3.3.src/projects/
這樣之後clang,clang-tools-extra和compiler-rt就能夠和llvm一塊兒編譯了。
在llvm-3.3.src同一層目錄上新建個目錄build-3.3並進入:
mkdir build-3.3 cd build-3.3
而後configure:
../llvm-3.3.src/configure --enable-optimized --enable-targets=host-only
注意:這邊兩個選項推薦你們加上,不然會產生巨大的文件,我第一次編譯的時候,沒有加上這兩個選項,編譯出來的結果多大9.4G(夠嚇人的吧?把個人磁盤都耗盡了,還報錯,google了很久才發現是磁盤空間不夠),耗時超過一個半小時,加上之後編譯出來的結果不到1G,i5四核20分鐘多一點就編譯完成。
而後make:
make -j4
儘可能把幾個核都用上。
而後make install:
sudo make install
用clang++ -v查看下:
clang version 3.3 (tags/RELEASE_33/final) Target: x86_64-unknown-linux-gnu Thread model: posix
此時clang就能夠正常使用了,clang默認用的是C++庫gcc的libstdc++。clang用法和gcc相似,若是要使用C++11的話:
clang++ -std=c++11 [input]
若是想用LLVM本身的libc++,就須要如下步驟(有點小麻煩):
進入以前解壓出來的libcxx-3.3.src:
cd libcxx-3.3.src/lib ./buildit
而後在libcxx-3.3.src/lib下面就能夠看到libc++.so.1.0文件,這就是libc++的動態庫。
按照下面的步驟把libc++.so.1.0放到/usr/lib下,並建立幾個連接:
sudo cp ./libc++.so.1.0 /usr/lib cd /usr/lib sudo ln -sf /usr/lib/libc++.so.1.0 libc++.so sudo ln -sf /usr/lib/libc++.so.1.0 libc++.so.1
而後把libcxx-3.3.src/include目錄拷貝到/usr/include/c++/v1(這個地址是clang默認查找的目錄,若是目錄不存在則本身建立):
cp -r libcxx-3.3.src/include/ /usr/include/c++/v1
按理說,這樣之後,就能夠了,使用libc++的方式以下:
clang++ -stdlib=libc++ -std=c++11 [input]
可是我這邊編譯的時候,提示找不到頭文件,須要手動加上-I/usr/include/c++/v1/:
clang++ -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/ [input]
運行的時候,也會提示連接錯誤:error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory。
解決辦法是在~/.basrch中加入下面的環境變量:
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib
重啓個shell就能夠了正常運行了,上面這些找不到頭文件和連接錯誤都是由於使用libc++的緣由,若是使用默認的libstdc++就沒有這些問題。
OK,儘管使用起來有點小麻煩,不過寫個makefile就不用每次都敲那麼長的命令了,Enjoy!