CentOS 6.4 編譯安裝LLVM3.3,Clang和Libc++


LLVM的最新版本3.3終於在6月17日發布了,按之前的計划6月5日就應該發布了,不過畢竟沒有太晚,趕在VS2013 preview(6月26日微軟Build大會)之前出來了微笑。加上之前gcc4.8.1在5月底6月初發布,當今最優秀的三大C++編譯器都在這個月發布重要更新,這個6月份真是C++的好日子啊!

LLVM之前就已經宣布做到C++11 Feature Complete了,3.3應該是第一個穩定版,之前gcc4.8.1也同樣是全面支持C++11,這篇文章介紹了如何在CentOS上編譯安裝最新的gcc,VS一直是落后很多的,不過還是很期待VS2013 preview中能增加多少C++11特性。

LLVM3.3提供了非常豐富的Pre-built Binaries:包括Ubuntu13.04,Ubuntu12.04和Ubuntu10.04,還有Debian6、FreeBSD9和Fedora18,當然還有Apple自己的Mac OS X了。只可惜沒有給CentOS也提供預編譯版本,只能自己編譯安裝了。

今天在CentOS上將最新版本的LLVM套件(LLVM,Clang和Libc++)編譯安裝好了,中間遇到了不少問題。雖然已經有很多博客介紹如何編譯安裝LLVM了,但是根據我自己親身體驗的情況來看,還是有地方需要注意的,也有東西值得跟大家分享一下。

安裝過程主要參考這幾篇文章:

http://clang.llvm.org/get_started.html

http://www.cnblogs.com/Frandy/archive/2012/10/20/llvm_clang_libcxx_cxx11.html

http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html

下面開始:

首先,從http://llvm.org/releases/download.html#3.3這邊下載最新的版本。如果從SVN下載代碼的話,已經是3.4的開發版本了,如果需要使用穩定版本,推薦自己下載3.3的代碼包,需要下載5個文件:

LLVM source code

Clang source code

Clang Tools Extra source code

Compiler RT source code

LibC++ source code

下載好了以后,四個壓縮包都解壓出來,得到四個目錄:

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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM