在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi
生活随笔
收集整理的這篇文章主要介紹了
在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、簡(jiǎn)介
LLVM
LLVM(之前稱為低級(jí)虛擬機(jī)Low Level Virtual Machine)是一種非常強(qiáng)大的編譯器基礎(chǔ)架構(gòu)框架,專門為使用您喜愛的編程語言編寫的程序的編譯時(shí)、鏈接時(shí)和運(yùn)行時(shí)優(yōu)化而設(shè)計(jì)。LLVM 可運(yùn)行于若干個(gè)不同的平臺(tái)之上,它以能夠生成快速運(yùn)行的代碼而著稱。
LLVM以C++編寫而成,對(duì)開發(fā)者保持開放,并兼容已有腳本。LLVM計(jì)劃啟動(dòng)于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple開發(fā)體系中的應(yīng)用。Apple也是LLVM計(jì)劃的主要資助者。
Clang
Clang是一個(gè)C++編寫、基于LLVM、發(fā)布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。它與GNU C語言規(guī)范幾乎完全兼容,并在此基礎(chǔ)上增加了額外的語法特性,比如C函數(shù)重載,其目標(biāo)(之一)就是超越GCC。2013年4月,Clang已經(jīng)全面支持C++11標(biāo)準(zhǔn),并開始實(shí)現(xiàn)C++14特性。Clang支持普通lambda表達(dá)式、返回類型的簡(jiǎn)化處理以及更好的處理constexpr關(guān)鍵字。
CentOS 6.6上面的GCC默認(rèn)是4.4.7,需要升級(jí)到4.8.2,參見
http://blog.csdn.net/tao_627/article/details/50448924
三、編譯安裝llvm-clang
下面利用svn來下載最新的LLVM、clang及輔助庫(kù)源碼并編譯安裝
1.下面創(chuàng)建一個(gè)頂層目錄:
mkdir ~/llvm-clang
2.Checkout LLVM:?
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
3.Checkout Clang:
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..
4.Checkout extra Clang Tools: (optional)?
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..
5.Checkout Compiler-RT:?
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..
返回~/llvm-clang目錄,并新建一個(gè)目錄llvm-build專門用于編譯llvm-clang,使得不污染源碼。
mkdir -p llvm-build
cd llvm-build/
建立編譯環(huán)境
../llvm/configure --enable-optimized
此種配置后,llv-clang默認(rèn)安裝到目錄/usr/local/下,如果想改變安裝目錄,則加上配置: --prefix=Path 來指定,輸入?
make -j4
編譯會(huì)耗費(fèi)一定時(shí)間,根據(jù)電腦硬件配置來確定時(shí)間長(zhǎng)短
sudo make uninstall
安裝完成后使用
clang -v
查看版本信息
四、安裝clang標(biāo)準(zhǔn)庫(kù)
clang 的標(biāo)準(zhǔn)庫(kù)————libc++(接口層)和 libc++abi(實(shí)現(xiàn)層)需要安裝頭文件和動(dòng)態(tài)鏈接庫(kù)(*.so)。
libc++是C++11實(shí)現(xiàn)的標(biāo)準(zhǔn)庫(kù)
?安裝libc++ ? ? ? ??
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cd libcxx/lib
./buildit
*.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++.so.1.0,要讓 clang 訪問必須復(fù)制到 /usr/lib/,
cp ./libc++.so.1.0 /usr/lib
cd /usr/lib
sudo ln -sf /usr/lib/libc++.so.1.0 /usr/lib/libc++.so
sudo ln -sf /usr/lib/libc++.so.1.0 /usr/lib/libc++.so.1
為什么要有這三個(gè)文件呢?在編譯鏈接的時(shí)候,-lc++或者stdlib=libc++,都會(huì)去鏈接libc++.so這個(gè),而在運(yùn)行的時(shí)候,會(huì)需要libc++.so.1這個(gè)。不知道為什么會(huì)這樣,但是如果不是這樣的話,編譯和運(yùn)行的時(shí)候就會(huì)出錯(cuò)。
頭文件已經(jīng)生成到 ~/llvm-clang/libcxx/include/,要讓clang 找到必須復(fù)制到/usr/include/c++/v1/,
因?yàn)閏lang默認(rèn)libc++的C++標(biāo)準(zhǔn)庫(kù)頭文件位于/usr/include/c++/v1底下
mkdir -p /usr/include/c++/v1/
cp -r ~/llvm-clang/libcxx/include/* /usr/include/c++/v1/
cd ../..
安裝 libc++abi?
cd ?~/llvm-clang/
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
cd libcxxabi/lib
./buildit
在lib生成動(dòng)態(tài)庫(kù)libc++abi.so.1.0,同上操作
cp ./libc++.so.1.0 /usr/lib
cd /usr/lib
sudo ln -sf /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so
sudo ln -sf /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so.1
復(fù)制頭文件到默認(rèn)的/usr/include/c++/v1/下面
cp -r ~/llvm-clang/libcxxabi/include/* /usr/include/c++/v1/
更新動(dòng)態(tài)庫(kù)
ldconfig
以后我們編譯時(shí)就可以采用下面的格式,比如編譯main.cpp文件
clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro- expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -lc++ -lc++abi main.cpp
五、檢驗(yàn)clang++/libc++/libc++abi
clang 3.0支持幾個(gè)連 gcc 4.6都沒支持的 C++11 特性,比如初始化非靜態(tài)類成員,看看下面的代碼 (new_feature.cpp):
#include <iostream>
#include <string>
class MyClass
{
public:
? std::string s = "Hello, world\n"; ?// Non-static data member initializer
};
int main()
{
? std::cout << MyClass().s;
}
第7行直接在類聲明處初始化一個(gè) std::string 成員,這是原本只在 Java/C# 里面才能做的事情,如今終于飛入 C++ 程序中。編譯命令:
clang++ --std=c++11 -stdlib=libc++ ?-lc++abi new_feature.cpp
./a.out
輸出熟悉的
Hello, world
我們的clang環(huán)境就算正式搭建好了。?
六、參考文獻(xiàn)
[1].http://www.linuxidc.com/Linux/2014-04/99719.htm
[2].http://clang.llvm.org/get_started.html
[3].http://www.xuebuyuan.com/491332.html
LLVM
LLVM(之前稱為低級(jí)虛擬機(jī)Low Level Virtual Machine)是一種非常強(qiáng)大的編譯器基礎(chǔ)架構(gòu)框架,專門為使用您喜愛的編程語言編寫的程序的編譯時(shí)、鏈接時(shí)和運(yùn)行時(shí)優(yōu)化而設(shè)計(jì)。LLVM 可運(yùn)行于若干個(gè)不同的平臺(tái)之上,它以能夠生成快速運(yùn)行的代碼而著稱。
LLVM以C++編寫而成,對(duì)開發(fā)者保持開放,并兼容已有腳本。LLVM計(jì)劃啟動(dòng)于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple開發(fā)體系中的應(yīng)用。Apple也是LLVM計(jì)劃的主要資助者。
Clang
Clang是一個(gè)C++編寫、基于LLVM、發(fā)布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。它與GNU C語言規(guī)范幾乎完全兼容,并在此基礎(chǔ)上增加了額外的語法特性,比如C函數(shù)重載,其目標(biāo)(之一)就是超越GCC。2013年4月,Clang已經(jīng)全面支持C++11標(biāo)準(zhǔn),并開始實(shí)現(xiàn)C++14特性。Clang支持普通lambda表達(dá)式、返回類型的簡(jiǎn)化處理以及更好的處理constexpr關(guān)鍵字。
二、前提條件
Python 2.7
GCC 4.7以上CentOS 6.6上面的GCC默認(rèn)是4.4.7,需要升級(jí)到4.8.2,參見
http://blog.csdn.net/tao_627/article/details/50448924
三、編譯安裝llvm-clang
下面利用svn來下載最新的LLVM、clang及輔助庫(kù)源碼并編譯安裝
1.下面創(chuàng)建一個(gè)頂層目錄:
mkdir ~/llvm-clang
2.Checkout LLVM:?
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
3.Checkout Clang:
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd ../..
4.Checkout extra Clang Tools: (optional)?
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd ../../../..
5.Checkout Compiler-RT:?
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd ../..
返回~/llvm-clang目錄,并新建一個(gè)目錄llvm-build專門用于編譯llvm-clang,使得不污染源碼。
mkdir -p llvm-build
cd llvm-build/
建立編譯環(huán)境
../llvm/configure --enable-optimized
此種配置后,llv-clang默認(rèn)安裝到目錄/usr/local/下,如果想改變安裝目錄,則加上配置: --prefix=Path 來指定,輸入?
make -j4
編譯會(huì)耗費(fèi)一定時(shí)間,根據(jù)電腦硬件配置來確定時(shí)間長(zhǎng)短
sudo make install
卸載使用sudo make uninstall
安裝完成后使用
clang -v
查看版本信息
四、安裝clang標(biāo)準(zhǔn)庫(kù)
clang 的標(biāo)準(zhǔn)庫(kù)————libc++(接口層)和 libc++abi(實(shí)現(xiàn)層)需要安裝頭文件和動(dòng)態(tài)鏈接庫(kù)(*.so)。
libc++是C++11實(shí)現(xiàn)的標(biāo)準(zhǔn)庫(kù)
?安裝libc++ ? ? ? ??
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
cd libcxx/lib
./buildit
*.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++.so.1.0,要讓 clang 訪問必須復(fù)制到 /usr/lib/,
cp ./libc++.so.1.0 /usr/lib
cd /usr/lib
sudo ln -sf /usr/lib/libc++.so.1.0 /usr/lib/libc++.so
sudo ln -sf /usr/lib/libc++.so.1.0 /usr/lib/libc++.so.1
為什么要有這三個(gè)文件呢?在編譯鏈接的時(shí)候,-lc++或者stdlib=libc++,都會(huì)去鏈接libc++.so這個(gè),而在運(yùn)行的時(shí)候,會(huì)需要libc++.so.1這個(gè)。不知道為什么會(huì)這樣,但是如果不是這樣的話,編譯和運(yùn)行的時(shí)候就會(huì)出錯(cuò)。
頭文件已經(jīng)生成到 ~/llvm-clang/libcxx/include/,要讓clang 找到必須復(fù)制到/usr/include/c++/v1/,
因?yàn)閏lang默認(rèn)libc++的C++標(biāo)準(zhǔn)庫(kù)頭文件位于/usr/include/c++/v1底下
mkdir -p /usr/include/c++/v1/
cp -r ~/llvm-clang/libcxx/include/* /usr/include/c++/v1/
cd ../..
安裝 libc++abi?
cd ?~/llvm-clang/
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
cd libcxxabi/lib
./buildit
在lib生成動(dòng)態(tài)庫(kù)libc++abi.so.1.0,同上操作
cp ./libc++.so.1.0 /usr/lib
cd /usr/lib
sudo ln -sf /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so
sudo ln -sf /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so.1
復(fù)制頭文件到默認(rèn)的/usr/include/c++/v1/下面
cp -r ~/llvm-clang/libcxxabi/include/* /usr/include/c++/v1/
更新動(dòng)態(tài)庫(kù)
ldconfig
以后我們編譯時(shí)就可以采用下面的格式,比如編譯main.cpp文件
clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro- expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -lc++ -lc++abi main.cpp
五、檢驗(yàn)clang++/libc++/libc++abi
clang 3.0支持幾個(gè)連 gcc 4.6都沒支持的 C++11 特性,比如初始化非靜態(tài)類成員,看看下面的代碼 (new_feature.cpp):
#include <iostream>
#include <string>
class MyClass
{
public:
? std::string s = "Hello, world\n"; ?// Non-static data member initializer
};
int main()
{
? std::cout << MyClass().s;
}
第7行直接在類聲明處初始化一個(gè) std::string 成員,這是原本只在 Java/C# 里面才能做的事情,如今終于飛入 C++ 程序中。編譯命令:
clang++ --std=c++11 -stdlib=libc++ ?-lc++abi new_feature.cpp
./a.out
輸出熟悉的
Hello, world
我們的clang環(huán)境就算正式搭建好了。?
六、參考文獻(xiàn)
[1].http://www.linuxidc.com/Linux/2014-04/99719.htm
[2].http://clang.llvm.org/get_started.html
[3].http://www.xuebuyuan.com/491332.html
總結(jié)
以上是生活随笔為你收集整理的在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在CentOS 6.6 64bit上升级
- 下一篇: 在CentOS 6.6 64bit上安装