關於 llvm/clang 在 Ubuntu 下的安裝?

我昨天裝的 Ubuntu 17.04,在網上看到說 clang 編譯器不錯,然後就照著官網下載源碼然後安裝,就是 Clang-Getting Started 那個,但是 make 階段等了兩小時最後總是出錯,試了好幾次了,後來直接 sudo apt install clang 發現也能安裝,而且可以用,重要的比官網的簡單多了就兩分鐘的事,我試了編譯 clang test.c -o test 沒有問題,想問下這兩種方法有什麼區別?最好解釋深點,本人初學 Linux,不算小白,入門那種吧


  • 只是需要一個程序,不關心版本號:用 apt 裝
  • 只是需要一個程序,需要的版本 apt 里就有:用 apt 裝
  • 只是需要一個程序,需要的版本 apt 沒有提供,但 PPA 里有:添加對應的 PPA,再用 apt 裝
  • 只是需要一個程序,需要的版本 apt 沒有提供,PPA 里也沒有:從源碼自行編譯安裝
  • 探索 Linux 世界的秘密:從源碼自行編譯安裝

apt 是從指定的軟體源獲取安裝包。

  • 默認使用的官方源:Ubuntu 發行版官方提供的安裝包,雖然不一定是最新版,但質量安全性都有保證
  • PPA 是個人軟體源,你可以認為是安裝包的 GitHub

安裝包,是專門的維護人員自己事先從源碼編譯後,打出來的包。


如果在終端加了make install,那麼這是安裝步驟,它的目標是將include, lib, bin等目錄下的文件複製到/usr/share/include, /usr/share/bin/等需要特權才能訪問的目錄下,所以必須加上sudo才能運行通過。如果不加你觀察錯誤提示,會提示沒有訪問許可權的。

一般從源碼編譯clang/llvm相當簡單的,假設你要安裝clang 4.0。

1. 那麼只需要從LLVM Download Page 頁面上下載clang 源碼和llvm源碼,然後將llvm包解壓重命名為llvm,cfe的tar包解壓重命名為clang,然後將clang目錄移動到llvm/tools/目錄下。

完成之後的目錄如下:

./------當前目錄
....llvm
...
........tools
............clang

2. 使用sudo apt install cmake安裝cmake。

3. 在當前目錄新建一個名稱為build目錄,用於存放構建的中間產物和最終的可執行文件。

./------當前目錄
....llvm/
...
........tools/
............clang/
....build/

4. 進入build目錄,執行cmake ../llvm -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE=Debug(或者Release)

5. 步驟4結束之後,執行make -j4(數字為你的CPU的核數)進行編譯。

6. 然後就可以進入build/bin下,觀察可以發現有很多的可執行文件,包括clang, clang++, clang-4.0等。

然後你可以在build目錄下執行sudo make install進行安裝了,成功安裝之後就可以直接在終端輸入clang hello.c -o hello了。

祝愉快!


用apt安裝的就是別人編譯好的版本,用源碼安裝只不過是把別人編譯的過程自己做了一遍而已。如果你沒有啥特殊的需求用apt安裝是最省事的,如果你閑得蛋疼想要體驗一下編譯的樂趣並且有充足的電費從源碼安裝也是不錯的選擇。


在 http://clang.llvm.org/get_started.html 的 Release Clang Versions 一節能找到 http://llvm.org/releases/ 然後就能看到 clang 所有歷史版本的下載鏈接,隨便選一個點進去,在 Pre-Built Binaries: 一節就能看到在各個主流平台已經構建好的程序安裝包

如果一開始沒看見 Release Clang Versions 那就只好交智商稅了

另外 llvm 有自己的 apt 源(http://apt.llvm.org/),提供了最新的版本。Ubuntu 官方的版本可能不是最新

只有需要調試 clang 或自己魔改 clang 或感受 clang 的構建過程,才有必要從源碼構建


sudo apt install clang 的不一定是最新的版本。

源碼編譯的話,可以編譯特定的版本(包括最新的),而且你還可以自己改代碼編譯。

想要最新的但是又不想編譯的話,可以去官網下安裝包。


你說了你是linux小白,從源碼編譯安裝出了問題就直接用apt裝,什麼時候才能所謂的「學會」linux呢?


推薦閱讀:

semaphore和mutex的區別?
購置筆記本電腦,Ubuntu專用,求品牌型號推薦?
世界為什麼開發 Linux?
想學習Linux源碼,哪些方法值得一試?

TAG:Linux | Ubuntu | 編譯器 | Clang | LLVM |