什么是LLVM?LLVM入门

null

LLVM 是一个提供模块化编译器和工具链软件和技术集合的项目。“LLVM”这个名字与其他IT和开源项目并没有什么不同。LLVM已经在伊利诺伊大学启动了一个研究项目,以创建一个编译器和工具链,支持不同编程语言的静态和动态编译。即使是不同的编程语言,如C、C++、爪哇、C++、Kotlin、Delphi、RISE、Ruby都支持LVVM编译器和工具链最流行的编程语言C和C++。

LLVM硬件和操作系统支持

作为一个开源项目,LLVM在不同的操作系统、平台和硬件中都受到支持。LLVM可以在Linux、Solaris、FreeBSD、NetBSD、MacOSX和Windows操作系统上运行。LVVM还支持不同的硬件和处理器体系结构,如x86、amd64、x86u64、PowerPC、V9和ARM。有关更具体的硬件和操作支持,请参阅下表。

图片[1]-什么是LLVM?LLVM入门-yiteyi-C++库
LLVM硬件和操作系统支持

LLVM支持的编程语言

正如start中所述,LLVM支持多种编程语言来编译和绑定。即使有些编程语言不完全受LLVM支持,我们也会列出支持的编程语言、支持级别和支持的特性。

C C++ 是LLVM的顶级编程语言。甚至LLVM是作为动态编译器创建的,而工具链C和C++是支持的主要目标。此外,LVVM是用C++开发的。

Objective-C 是另一个完全支持的编程语言,类似于C和C++。

LLVM体系结构和组件

LLVM提供了一个完整的体系结构,其中有不同的组件和片段来完成这幅图。LLVM提供前端、过程和后端。下图说明了LLVM如何处理源代码并生成可执行文件和二进制文件。

图片[2]-什么是LLVM?LLVM入门-yiteyi-C++库
LLVM组件、体系结构和编译步骤

Front End 将源代码转换为 intermediate representation IR . 这是LLVM正常运行的其他步骤和编译器的准备过程。前端也不是LLVM的核心部分,通常使用辅助软件或类似Clang的工具。

了解更多 CMake教程在Linux中构建和编译

Pass IR 是LLVM的核心任务,编译过程在这里进行。IR或中间代码将通过多阶段反复优化。

Back End 最后一步是将优化的IR代码转换为特定于CPU体系结构或操作系统的机器代码。

下面我们将列出LLVM的一些重要工具和组件。

Clang 是专门为LLVM创建的编译器。Clang可以将IR代码编译成可执行文件和二进制文件。另外,Clang的速度几乎是GCC编译器的3倍。

LLDB 是为LLVM项目创建的调试器。LLDB比GDB更快、更高效,并且与LLVM核心和Clang紧密集成。

libc++ libc++ ABI 是C++标准库实现。

compiler-rt 是一个用于底层代码的动态测试实用程序。它可以用来运行和文本的底层代码在实时。

LLVM Core 是LLVM的核心组件,其中核心库为不同的CPU和硬件体系结构提供优化器和代码生成支持。

LLVM与GCC

Gnu Compiler Collection 或者GCC是另一个流行和广泛使用的开源编译器项目。在LLVM出现之前,GCC实际上是一个为不同的开源世界设计的编译器。随着LLVM的出现,情况开始发生变化,LLVM凭借其优势也变得流行起来。下面我们将从不同的角度比较LLVM和GCC。

  • GCC支持比LLVM更传统的编程语言,如Ada、Fortran和Go。
  • GCC比LLVM支持更多的硬件和CPU架构,比如RISC-V。
  • GCC比LLVM支持更多的语言扩展和汇编语言特性。
  • LLVM被新兴语言使用,比如Swift、Rust、Julia和Ruby,然后是GCC。
  • LLVM比C语言更符合C语言和C++编程语言的要求。
  • LLVM提供了比GCC更准确和友好的诊断信息。

了解更多 Linux下使用ldconfig命令管理库

安装LLVM

LLVM可以安装在Linux和Ubuntu操作系统上,如下所示。我们将提供包裹名称 llvm-10 llvm-10-tools 为了安装llvmversion10核心库和工具。

$ sudo apt install llvm-10 llvm-10-tools clang
图片[3]-什么是LLVM?LLVM入门-yiteyi-C++库
安装LLVM

LLVM入门

我们已经安装了名为llvm-10、llvm-10-tools和clang的必需包。现在我们将用LLVM编译一个简单的helloworld示例作为入门示例。下面提供了helloworld应用程序源代码。

#include int main(){   printf("Hello World From Poftut.com via LLVM");   return 0;}

我们将编译并创建名为hellou world的可执行文件,命令如下。LLVM将由引擎盖下的叮当命令执行。

$ clang hello_world.c -o hello_world

新创建的hellou world可执行文件可以从控制台或bash命令行运行,如下所示。

$ ./hello_world
© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享