CentOS7.x安裝LLVM6.0

最近業(yè)務(wù)需要研究LLVM抽象語(yǔ)法樹(AST)和中間代碼(IR)生成,需要安裝LLVM,在安裝過(guò)程中,遇到了很多問(wèn)題。網(wǎng)上雖然有很多類blog,但比較零散,在實(shí)際安裝過(guò)程中,仍會(huì)遇到很多坑要填,為了避免其他人也遇到類似問(wèn)題,特此將安裝LLVM過(guò)程中遇到的各種問(wèn)題匯總記錄一下。如果對(duì)各位有所幫助實(shí)屬吾幸。

注意:本文CentOS為docker從repository 拉取的7.x的鏡像;如果與你的環(huán)境不一致,可參考主要步驟即可。

LLVM安裝主要步驟參考了博客《??LLVM學(xué)習(xí)之路(一) LLVM+Clang 編譯與安裝?》,并對(duì)其中未說(shuō)明的問(wèn)題進(jìn)行了大量補(bǔ)充。安裝過(guò)程中千萬(wàn)注意第二步到第五步順序不可顛倒??!,否則會(huì)安裝失??!;閑話不多說(shuō),讓我們開啟LLVM安裝之旅吧。

第一步、安裝SVN

CentOS7下自帶svn,不需要下載安裝,可使用命令查看svn版本?

[root@localhost /]# svn - -version

如果沒(méi)有svn,則安裝svn,使用yum命令?

[root@localhost /]# yum install subversion

本文的重點(diǎn)在于LLVM的安裝,如果需要完整版的svn安裝過(guò)程,可以參考博客《CentOS7下安裝SVN服務(wù)》(點(diǎn)擊即可跳轉(zhuǎn))


第二步、安裝/升級(jí)GCC(GCC版本應(yīng)不小于5.1.0,本文安裝版本為?GCC?8.3.0)


1 下載GCC安裝碼包

wget http://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz

2 解壓

tar jxf gcc-8.3.0.tar.gz

3 下載編譯依賴

cd gcc-8.3.0

./contrib/download_prerequisites

4 生成Makefile先建一個(gè)編譯的目錄gcc-build-8.3.0

mkdir gcc-build-8.3.0

cd gcc-build-8.3.0/

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

5 編譯

make -j4

4表示使用4個(gè)核心,根據(jù)您的CPU來(lái)指定。也可不指定任何參數(shù)。6 安裝

sudo make install

7 驗(yàn)證

gcc -v

還有原來(lái)的版本,重啟后,再驗(yàn)證OK

8 更新動(dòng)態(tài)庫(kù)查看動(dòng)態(tài)庫(kù)的版本:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

...

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

...?

?

確實(shí)沒(méi)有更新,默認(rèn)情況下,會(huì)安裝在如下目錄:

/usr/local/lib64/libstdc++.so.6.0.25

簡(jiǎn)單了,將原來(lái)的庫(kù)替換為上面的就可以了:

rm -rf /usr/lib64/libstdc++.so.6

ln -s /usr/local/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6

然后再查看動(dòng)態(tài)庫(kù)的版本:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

結(jié)果

....

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBCXX_3.4.21

GLIBCXX_3.4.22

GLIBCXX_3.4.23

GLIBCXX_3.4.24

GLIBCXX_3.4.25

....


第三步、安裝/升級(jí)python(python版本應(yīng)不小于2.7,本文安裝版本為?python?3.7.0)


第四步、接下來(lái)要解決GCC的版本沖突問(wèn)題


請(qǐng)參考鏈接:https://blog.csdn.net/u012973744/article/details/36197937/


第五步、安裝cmake(建議版本應(yīng)不小于,本文安裝版本為cmake3.15.7)


第六步、安裝LLVM? 6.0

下載LLVM 6.0源碼(建議重命名為llvm):

cd where-you-want-llvm-to-live

svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

下載 Clang源碼(建議重命名為clang):

cd where-you-want-llvm-to-live

cd llvm/tools

svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

下載?Clang-extra-Tools源碼(建議重命名為extra):

cd where-you-want-llvm-to-live

cd llvm/tools/clang/tools

svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

下載LLD linker [可選,鏈接器]:

cd where-you-want-llvm-to-live

cd llvm/tools

svn co http://llvm.org/svn/llvm-project/lld/trunk lld

下載 Polly Loop Optimizer [可選,循環(huán)和數(shù)據(jù)優(yōu)化器]:

cd where-you-want-llvm-to-live

? ? ? ? cd llvm/tools

? ? ? ? svn co http://llvm.org/svn/llvm-project/polly/trunk polly

下載?Compiler-RT(建議重命名為Compiler-RT):

cd where-you-want-llvm-to-live

cd llvm/projects

svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

下載?Libomp [可選,如果需要openmp支持的話再下載]:

cd where-you-want-llvm-to-live

cd llvm/projects

svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp

下載? libcxx and libcxxabi [可選]:

cd where-you-want-llvm-to-live

cd llvm/projects

svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx

svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi

下載?Test Suite Source Code [可選,llvm自帶測(cè)試,較大]

cd where-you-want-llvm-to-live

cd llvm/projects

svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite

2.也可以直接從網(wǎng)站下載源代碼按以上目錄結(jié)構(gòu)解壓:http://releases.llvm.org/

? ? 下載所需要版本的對(duì)應(yīng)源碼即可


編譯安裝


可在llvm解壓同級(jí)目錄下新建llvm-build文件夾

進(jìn)入llvm-uild目錄:

cd llvm-build

編譯llvm源碼(盡量選擇Release安裝,比較快,默認(rèn)Debug安裝會(huì)比較慢):

cmake -G "Unix Makefiles" -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_BUILD_TYPE=Release ../llvm

注意:這里容易出現(xiàn)GCC環(huán)境更新的問(wèn)題,“明明我在前邊幾步已經(jīng)更新了GCC環(huán)境,可是仍人Cmake的時(shí)候仍然拋出GCC環(huán)境.o庫(kù)缺失”的問(wèn)題,看到網(wǎng)上遇到類似問(wèn)題的人很多。如果你也恰巧遇到,可以按照第三步中更新GCC的方法重新操作一下,然后將*/llvm-uild/*目錄下的所有文件清除(rm -rf *)即可。然后再次執(zhí)行? cmake -G "Unix Makefiles" -DLLVM_ENABLE_ASSERTIONS=On -DCMAKE_BUILD_TYPE=Release ../llvm

?(啟用多個(gè)線程編譯[這里用4個(gè)])

make -j4?

make install

至此,LLVM+Clang基本安裝完畢。


測(cè)試舉例


查看clang版本:

clang --version

獲取幫助選項(xiàng):

clang -help

也可以編寫簡(jiǎn)單的helloworld程序hello.c來(lái)用clang進(jìn)行編譯:

clang hello.c

./a.out

或:

clang hello.c -o hello

./hello

至于為什么編譯安裝的LLVM+Clang卻只測(cè)試clang,那么來(lái)看一下如何簡(jiǎn)單的使用LLVM:

將hello.c編譯為L(zhǎng)LVM IR的二進(jìn)制文件(得到hello.bc):

clang -emit-llvm -c hello.c -o hello.bc

使用llvm虛擬機(jī)執(zhí)行hello.bc(輸出“hello world!”):

lli hello.bc

將hello.bc從二進(jìn)制轉(zhuǎn)換為可讀的IR文件(得到hello.ll):

llvm-dis hello.bc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容