ubuntu下載源碼clang + llvm+lldb 編譯+安裝


 

 

【本文可能涉及到Ubuntu安裝以下工具:】

  A、g++

  B、gcc

  C、make

  D、cmake

  E、clang(10.0.1)(必須)

  F、llvm(10.0.1)(必須)

  G、lldb(10.0.1)(可選)

  H、libcxx(10.0.1)(必須)

  I、libcxx abi(10.0.1)(必須)

  J、compiler-rt(可選)

 

【心累】

  我目前有兩台虛擬機: A、Ubuntu【ubuntu-20.04.1-desktop-amd64.iso】, B、fedora【Fedora-Workstation-Live-x86_64-32-1.6.iso】。 A可以正常與物理機文件共享,但是缺乏開發環境;B可以非常方便的搭建開發環境,但是與物理機的文件共享存在問題(虛擬機設置了文件共享,但是虛擬機無法掛載,這是其一;手動掛載Windows10共享文件夾,各種出問題(語法,正確,密碼正確,防火牆關了,....)還是無法使用mount cifs掛載,折騰了好久, 終究選擇放棄折騰)。選擇A搭建開發環境搭建。 

【1、其他教程】

  llvm+clang 源碼安裝教程【http://www.nagain.com/activity/article/4/

  教程使用的是svn下載源碼再編譯安裝,本文是直接從官網下載源碼並安裝,非svn, 為什么不用svn?1、目前, svn檢出項目各種超時,無法完整下載源碼;2、准備了T子,經測,沒用。

【2、源碼下載】

  網站:【https://releases.llvm.org/download.html

  源碼有這些:

  我這里選擇了:

1 llvm-project monorepo source code (.sig)
2 LLVM source code (.sig)
3 Clang source code (.sig)
4 compiler-rt source code (.sig)
5 libc++ source code (.sig)
6 libc++abi source code (.sig)
7 LLDB Source code (.sig)

  哦,忘了,還有【CMake】,我下載了: 【cmake-3.18.2-linux-x86_64.sh 】

  【為什么不直接在虛擬機使用命令安裝?慢!慢!慢! 這個步驟更是讓人心累: 物理機C下載上面所需的源碼,慢的要死:預計需要好幾個小時才能下載好,要不就是 IDM 下載到 99% 失敗。有人說,准備梯子,沒有用,T子准備好了,並沒有任何變化(油管 English with Lucy的視頻看完了,下載還是不到20kb/s)。肯定你會想到修改hosts,更新到最新的hosts,還是沒有效果(自己寫了程序,每天定時獲取最新版hosts)。 於是,換mac執行下載,意想不到的是: 下載速度則快,直接寬帶跑滿。 原本在物理機C上下載需要好幾個小時甚至更長,mac下載上面所需源碼僅僅不到2mins,都沒有准備T子。 

  可能你會說,使用命令:sudo apt-get install clang-7.0 不好? 額,我把鏡像切換為國內的幾個大廠鏡像做了嘗試,下載賊慢,還不如我下載海外鏡像來的快。物理機C打開T子,還是下載賊慢,呼,真的是心累。還有就是使用svn, 直接檢出,Ubuntu和物理機C 均顯示超時,無法完整檢出項目,掛了T子也沒有用。)

  各種折騰。為什么國內下載這么難?難道是GFW2.0升級到了3.0 ? 為什么mac下載就能跑滿帶寬?】

  扯遠了。回到正文

【3、 gcc、g++、make 安裝】

  A、將下載好的源碼放入虛擬機

  B、安裝 gcc、g++、make : 命令(可能鏡像下載較慢,我反正是等了很久):

$ sudo apt-get install gcc  
$ sudo apt-get install g++  
$ sudo apt-get install make  

【4、cmake源碼安裝】

  A、源碼安裝cmake,解壓源碼,使用終端打開解壓后的文件夾,執行命令:

$ cd to/path/cmake_src/
$ sh cmake-3.18.2-linux-x86_64.sh # 解壓拿到已經編譯好的文件

  B、將cmake添加到環境變量,這個就不造輪子了。提醒:使用命令【echo $SHELL】查看使用的是何種SHELL,就將cmake添加到對應shell的配置文件,通常是在【home】下的 【.bashrc】文件配置(注意,修改該文件權限); 若使用 【oh-my-zsh】 ,則是在【home】下的【.zshrc】。添加指向解壓目錄下的bin目錄,向shell的配置文件中追加添加下面的兩行:

#cmake 
export PATH= xxx/bin:$PATH   # xxx = cmake的解壓目錄

  一個例子:

#cmake 
export PATH=/home/google/cmake/bin:$PATH

  C、保存后,使用命令: 【source 配置文件】刷新即可。或者注銷或者重啟即可。例如,我使用的是oh-my-zsh,則使用下面命令刷新配置:

source ~/.zshrc

  查看是否安裝成功, 可使用命令【cmake --version】查看結果:

 

【5、編譯llvm】

  按照教程【http://www.nagain.com/activity/article/4/】,將下載好的源碼放到對應的目錄下,執行命令編譯即可。

  【注意】如果出現類似【 Killed (program cc1plus)】的錯誤,則說明內存資源不夠,可參考【https://blog.csdn.net/u011897411/article/details/89742008】創建分區(我的2G內存已經跪了,不夠用,增加到4G,並創建了分區,分區大小,根據個人情況而定)

 

  A、解壓 lllvm  源碼

  B、將  clang  解壓的源碼放入到llvm的tools文件夾下: llvm/tools/clang 存放解壓后的文件如下:

  C、將 compiler-rt  解壓到的源碼放到 llvm的projects文件夾下: lllvm/projects/compiler-rt 存放解壓后的文件

  D、libcxx解壓到 llvm 目錄下的 projects 文件夾:

  E、將 libcxx abi 解壓到  llvm 目錄下的 projects 文件夾:

  結果:

  G、將 lldb 源碼 解壓到 llvm 目錄下 tools 目錄:

 

  H、回到llvm解壓后的目錄,創建 build 作為輸出目錄: 執行 cmake構建命令:

1 cd to/path/llvm
2 mkdir build && cd build
3 cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .. 

  I、執行make -j <X>

1 make -j 4

  耐心等待編譯結果 。(12/09/2020  01:45   正在等待編譯結果) 

  J、一覺起來,都編譯好了

。。。。。。。。
[ 98%] Built target clangFrontendTool
Scanning dependencies of target c-index-test
[ 98%] Building C object tools/clang/tools/c-index-test/CMakeFiles/c-index-test.dir/c-index-test.c.o
[ 98%] Building CXX object tools/clang/tools/c-index-test/CMakeFiles/c-index-test.dir/core_main.cpp.o
[ 98%] Linking CXX shared module ../../../../../../lib/CheckerOptionHandlingAnalyzerPlugin.so
[ 98%] Linking CXX shared module ../../../../../../lib/CheckerDependencyHandlingAnalyzerPlugin.so
[ 98%] Linking CXX shared module ../../../../../../lib/SampleAnalyzerPlugin.so
[ 98%] Built target CheckerOptionHandlingAnalyzerPlugin
Scanning dependencies of target clang-cpp
[100%] Building CXX object tools/clang/tools/clang-shlib/CMakeFiles/clang-cpp.dir/clang-shlib.cpp.o
[100%] Linking CXX shared library ../../../../lib/libclang-cpp.so
[100%] Built target CheckerDependencyHandlingAnalyzerPlugin
Scanning dependencies of target c-arcmt-test
[100%] Building C object tools/clang/tools/c-arcmt-test/CMakeFiles/c-arcmt-test.dir/c-arcmt-test.c.o
[100%] Linking CXX executable ../../../../bin/c-arcmt-test
[100%] Built target c-arcmt-test
Scanning dependencies of target clang-check
[100%] Building CXX object tools/clang/tools/clang-check/CMakeFiles/clang-check.dir/ClangCheck.cpp.o
[100%] Built target SampleAnalyzerPlugin
Scanning dependencies of target clangDependencyScanning
[100%] Linking CXX static library ../../../../../lib/libclangDependencyScanning.a
[100%] Built target clangDependencyScanning
Scanning dependencies of target clang
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/driver.cpp.o
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1_main.cpp.o
[100%] Linking CXX executable ../../../../bin/c-index-test
[100%] Linking CXX executable ../../../../bin/clang-check
[100%] Built target clang-cpp
Scanning dependencies of target clang-scan-deps
[100%] Building CXX object tools/clang/tools/clang-scan-deps/CMakeFiles/clang-scan-deps.dir/ClangScanDeps.cpp.o
[100%] Built target c-index-test
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1as_main.cpp.o
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1gen_reproducer_main.cpp.o
[100%] Built target clang-check
[100%] Linking CXX executable ../../../../bin/clang
[100%] Linking CXX executable ../../../../bin/clang-scan-deps
[100%] Built target clang-scan-deps
[100%] Built target clang

   K、查看clang 和 clang++的版本信息,

 

【6、添加clang和clang++到環境變量】

  A、我使用的是oh-my-zsh美化的終端,所以,需要在其對應的配置文件 【home】下的【.zshrc】追加下面的命令:

# clang clang++
export PATH=to/llvm_path/llvm-10.0.1/build/bin:$PATH

  B、添加成功, 鍵入命令【clang++ --version】,輸出:

  C、代碼測試

 【7、重新編譯llvm】

  使用clang 重新編譯llvm . 來到【 llvm/build 目錄 命令:

CC=clang CXX=clang++ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..

 


免責聲明!

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



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