ubuntu20.04 安装clang(什么是llvm、什么是clang以及其和clang的关系)

ubuntu20.04 安装clang

前置基础

编译器是一种计算机程序,它将某种编程语言(高级编程语言)写成的源代码转换成另一种编程语言(低级编程语言)。一个现代编译器的主要工作流程为:源代码->预处理器->编译器->目标代码->链接器->可执行程序,最后打包文件,让计算机运行。编译器的目的是将便于人写的高级编程语言作为源代码,翻译成计算机能够执行的低级机器语言,也就是可执行文件。其中高级语言有C、C++、Java、Python等,低级语言有汇编语言和机器代码。一个编译器可以按照三段式分为:前段(Fontend)、优化器(Optimizer)、后端(Backend)。

什么是clang

CLang是一个由C++编写的编译器前端,能够编译C/C++/Objective等高级语言,属于LLVM的一部分,发布于BSD(自由软件中使用最广发的许可证之一)许可证下,其目的就是为了超越GCC。经过测试证明,Clang编译Objective-C代码的速度为GCC的3倍左右,同时它还能针对用户发生的编译错误准确地给出建议。

Clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。

Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。

什么是LLVM以及其和clang的关系

官网:https://llvm.org/

LLVM最初是伊利诺伊大学的一个研究项目,目的是提供一种基于SSA的现代编译策略,该策略能够支持任意编程语言的静态和动态编译。从那时起,LLVM逐渐发展成为一个由多个子项目组成的总体项目,其中许多子项目已用于各种商业和开源项目的产品中,并广泛用于学术研究。

clang是LLVM架构下的一个子项目,是C/C++/Obj C语言的编译器前端,该项目的源码和LLVM是分开放置的。

LLVM最开始是被当做虚拟机来开发的,名字全程是Low Level VIsual Machine;不过开发之后,从来都没有被当做虚拟机来使用,但是由于名字已经叫开了,作者就决定以LLVM作为该项目的全程来使用了。

LLVM目前是种编译器框架系统的名字,该系统以C++编写完成,整个框架包括前端、优化器和后端三个部分;同时也有一个狭义的LLVM,认为LLVM只是LLVM架构的后端。

LLVM将传统的编译过程拆分成了前端、优化器和后端三个部分,其中前端是预处理、词法分析、语法分析、生成抽象语法树(AST)和产生中间表示(IR)的过程,后端是根据中间表示(IR)生成最终目标平台的机器语言的过程,中间优化器则是对IR进行优化处理的过程。

**这样做的好处是可以对编译过程进行解耦,当增加对一门语言的支持时,只需要增加一个前端(FrontEnd);当需要增加一个编译的目标平台时,则只需要增加一个后(BackEnd);**优化器无关乎语言和平台,只在中间表示(IR)的层面上进行。

宏观的LLVM,指的是整个的LLVM的框架,它肯定包含了Clang,因为Clang是LLVM的框架的一部分,是它的一个C/C++的前端。虽然这个前端占的比重比较大,但是它依然只是个前端,LLVM框架可以有很多个前端和很多个后端,只要你想继续扩展。

微观的LLVM指的是LLVM的core,或者是说实际开发和使用中的具体的LLVM。也可以简单的理解为名为LLVM的源码包。编译LLVM和Clang的时候,LLVM的源码包是不包含Clang的源码包的,需要单独下载Clang的源码包。

Clang和微观LLVM一起构成了一个完整的编译器,Clang是前端,中端优化和后端都在微观LLVM之中。

clang和gcc区别

Clang和GCC的主要区别如下

  • Clang比GCC编译用的时间更短,包括预处理、语法分析、解析、语义分析、抽象语法树生成的时间。
  • Clang比GCC的内存占用更小。
  • Clang生成的中间产物比GCC更小。
  • Clang的错误提示比GCC更加友好。
  • Clang有静态分析,GCC没有。
  • Clang使用BSD许可证,GCC使用GPL许可证。
  • Clang从一开始就被设计为一个API,允许它被源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。
  • GCC比Clang支持更多的语言,例如Java。
  • GCC比Clang支持更多的平台。
  • GCC比Clang更流行。

整体总结:Clang具有以下优点:

  • 编译速度块,内存占用小
  • 诊断信息可读性强
  • 模块化设计,易于扩展增强,易于 IDE 集成及其他用途的重用
  • 与GCC、MSVC兼容

ubuntu20.04 安装clang

安装过程

参考URL: https://zhuanlan.zhihu.com/p/102028114

Ubuntu 20.04下直接装不行,sudo apt install clang 会提依赖问题。

sudo apt install clang

为了找到问题所在,使用apt 把依赖的包都放到命令上,比如第一个提示的是 clang-10

sudo apt install clang clang-10

这时会提示一堆库依赖问题,选一个放到clang-10后面继续回车

提醒 libclang-common-10-dev

apt-get install  libclang-common-10-dev

又提醒
libclang-common-10-dev : Depends: lib32gcc-s1 (>= 4.2) but it is not going to be installed
Depends: lib32stdc++6 (>= 4.1.1) but it is not going to be installed
Depends: libc6-i386 (>= 2.17) but it is not going to be installed

使用官方预编译二进制安装

以在Ubuntu 20.04安装LLVM 13.0.0为例

sudo mkdir -p /usr/local
cd /usr/local
sudo wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
sudo tar xvf clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz
sudo mv clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04 llvm
export PATH="$PATH:/usr/local/llvm/bin"

查看clang版本:

clang -v

亲测可用!缺点,就是wget 从github下载速度比较慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值