在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi
生活随笔
收集整理的這篇文章主要介紹了
在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、簡介
LLVM
LLVM(之前稱為低級虛擬機Low Level Virtual Machine)是一種非常強大的編譯器基礎架構框架,專門為使用您喜愛的編程語言編寫的程序的編譯時、鏈接時和運行時優化而設計。LLVM 可運行于若干個不同的平臺之上,它以能夠生成快速運行的代碼而著稱。
LLVM以C++編寫而成,對開發者保持開放,并兼容已有腳本。LLVM計劃啟動于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple開發體系中的應用。Apple也是LLVM計劃的主要資助者。
Clang
Clang是一個C++編寫、基于LLVM、發布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。它與GNU C語言規范幾乎完全兼容,并在此基礎上增加了額外的語法特性,比如C函數重載,其目標(之一)就是超越GCC。2013年4月,Clang已經全面支持C++11標準,并開始實現C++14特性。Clang支持普通lambda表達式、返回類型的簡化處理以及更好的處理constexpr關鍵字。
CentOS 6.6上面的GCC默認是4.4.7,需要升級到4.8.2,參見
http://blog.csdn.net/tao_627/article/details/50448924
三、編譯安裝llvm-clang
下面利用svn來下載最新的LLVM、clang及輔助庫源碼并編譯安裝
1.下面創建一個頂層目錄:
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目錄,并新建一個目錄llvm-build專門用于編譯llvm-clang,使得不污染源碼。
mkdir -p llvm-build
cd llvm-build/
建立編譯環境
../llvm/configure --enable-optimized
此種配置后,llv-clang默認安裝到目錄/usr/local/下,如果想改變安裝目錄,則加上配置: --prefix=Path 來指定,輸入?
make -j4
編譯會耗費一定時間,根據電腦硬件配置來確定時間長短
sudo make uninstall
安裝完成后使用
clang -v
查看版本信息
四、安裝clang標準庫
clang 的標準庫————libc++(接口層)和 libc++abi(實現層)需要安裝頭文件和動態鏈接庫(*.so)。
libc++是C++11實現的標準庫
?安裝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 訪問必須復制到 /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
為什么要有這三個文件呢?在編譯鏈接的時候,-lc++或者stdlib=libc++,都會去鏈接libc++.so這個,而在運行的時候,會需要libc++.so.1這個。不知道為什么會這樣,但是如果不是這樣的話,編譯和運行的時候就會出錯。
頭文件已經生成到 ~/llvm-clang/libcxx/include/,要讓clang 找到必須復制到/usr/include/c++/v1/,
因為clang默認libc++的C++標準庫頭文件位于/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生成動態庫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
復制頭文件到默認的/usr/include/c++/v1/下面
cp -r ~/llvm-clang/libcxxabi/include/* /usr/include/c++/v1/
更新動態庫
ldconfig
以后我們編譯時就可以采用下面的格式,比如編譯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
五、檢驗clang++/libc++/libc++abi
clang 3.0支持幾個連 gcc 4.6都沒支持的 C++11 特性,比如初始化非靜態類成員,看看下面的代碼 (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行直接在類聲明處初始化一個 std::string 成員,這是原本只在 Java/C# 里面才能做的事情,如今終于飛入 C++ 程序中。編譯命令:
clang++ --std=c++11 -stdlib=libc++ ?-lc++abi new_feature.cpp
./a.out
輸出熟悉的
Hello, world
我們的clang環境就算正式搭建好了。?
六、參考文獻
[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(之前稱為低級虛擬機Low Level Virtual Machine)是一種非常強大的編譯器基礎架構框架,專門為使用您喜愛的編程語言編寫的程序的編譯時、鏈接時和運行時優化而設計。LLVM 可運行于若干個不同的平臺之上,它以能夠生成快速運行的代碼而著稱。
LLVM以C++編寫而成,對開發者保持開放,并兼容已有腳本。LLVM計劃啟動于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple開發體系中的應用。Apple也是LLVM計劃的主要資助者。
Clang
Clang是一個C++編寫、基于LLVM、發布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。它與GNU C語言規范幾乎完全兼容,并在此基礎上增加了額外的語法特性,比如C函數重載,其目標(之一)就是超越GCC。2013年4月,Clang已經全面支持C++11標準,并開始實現C++14特性。Clang支持普通lambda表達式、返回類型的簡化處理以及更好的處理constexpr關鍵字。
二、前提條件
Python 2.7
GCC 4.7以上CentOS 6.6上面的GCC默認是4.4.7,需要升級到4.8.2,參見
http://blog.csdn.net/tao_627/article/details/50448924
三、編譯安裝llvm-clang
下面利用svn來下載最新的LLVM、clang及輔助庫源碼并編譯安裝
1.下面創建一個頂層目錄:
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目錄,并新建一個目錄llvm-build專門用于編譯llvm-clang,使得不污染源碼。
mkdir -p llvm-build
cd llvm-build/
建立編譯環境
../llvm/configure --enable-optimized
此種配置后,llv-clang默認安裝到目錄/usr/local/下,如果想改變安裝目錄,則加上配置: --prefix=Path 來指定,輸入?
make -j4
編譯會耗費一定時間,根據電腦硬件配置來確定時間長短
sudo make install
卸載使用sudo make uninstall
安裝完成后使用
clang -v
查看版本信息
四、安裝clang標準庫
clang 的標準庫————libc++(接口層)和 libc++abi(實現層)需要安裝頭文件和動態鏈接庫(*.so)。
libc++是C++11實現的標準庫
?安裝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 訪問必須復制到 /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
為什么要有這三個文件呢?在編譯鏈接的時候,-lc++或者stdlib=libc++,都會去鏈接libc++.so這個,而在運行的時候,會需要libc++.so.1這個。不知道為什么會這樣,但是如果不是這樣的話,編譯和運行的時候就會出錯。
頭文件已經生成到 ~/llvm-clang/libcxx/include/,要讓clang 找到必須復制到/usr/include/c++/v1/,
因為clang默認libc++的C++標準庫頭文件位于/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生成動態庫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
復制頭文件到默認的/usr/include/c++/v1/下面
cp -r ~/llvm-clang/libcxxabi/include/* /usr/include/c++/v1/
更新動態庫
ldconfig
以后我們編譯時就可以采用下面的格式,比如編譯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
五、檢驗clang++/libc++/libc++abi
clang 3.0支持幾個連 gcc 4.6都沒支持的 C++11 特性,比如初始化非靜態類成員,看看下面的代碼 (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行直接在類聲明處初始化一個 std::string 成員,這是原本只在 Java/C# 里面才能做的事情,如今終于飛入 C++ 程序中。編譯命令:
clang++ --std=c++11 -stdlib=libc++ ?-lc++abi new_feature.cpp
./a.out
輸出熟悉的
Hello, world
我們的clang環境就算正式搭建好了。?
六、參考文獻
[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
總結
以上是生活随笔為你收集整理的在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在CentOS 6.6 64bit上升级
- 下一篇: 在CentOS 6.6 64bit上安装