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

文章目录
ubuntu20.04 安装clang
前置基础
什么是clang
什么是LLVM以及其和clang的关系
clang和gcc区别
ubuntu20.04 安装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
1
为了找到问题所在,使用apt 把依赖的包都放到命令上,比如第一个提示的是 clang-10

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

提醒 libclang-common-10-dev

apt-get install libclang-common-10-dev
1
又提醒
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”
1
2
3
4
5
6
查看clang版本:

clang -v
1
亲测可用!缺点,就是wget 从github下载速度比较慢。
————————————————
版权声明:本文为CSDN博主「西京刀客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/inthat/article/details/124515945

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值