安装LLVM+Clang教程

2023-11-19

目录

前言

一、LLVM简介

二、LLVM+Clang的安装


前言

最近可能要学习编译器相关的知识,因此总结一下LLVM的安装方法,以防忘记如何安装。

接下来就是正式的安装过程了。。。

------------------------------------------------------------分割线---------------------------------------------------------------------------------------------------

一、LLVM简介

LLVM是Low Level Virtual Machine 的缩写,它源自于伊利诺伊大学的一个开源研究项目,旨在提供一种现代化的编译机制,使得对于任何的语言既可以做到静态编译也可以动态编译,并且非常高效。后来LLVM孵化了很多的子项目,例如:Clang,LLDB,OpenMP等。

静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中                    去,使可执行文件在运行时不需要依赖于动态链接库

动态编译:动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其                     优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很                     简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没                     有安装对应的运行库,则用动态编译的可执行文件就不能运行。

LLVM由三部分组成:

第一部分是LLVM套件,它包含有LLVM所需的所有工具、库函数、和头文件,汇编器、反汇编器、bitcode(一种中间代码)分析器和优化器,以用来测试LLVM和Clang前端的基本回归测试。

第二部分是Clang前端,它将C/C++,Object C和Object C++代码编译成LLVM的中间代码(bitcode),一旦编译成LLVM bitcode,就可以使用LLVM的套件中的LLVM工具来进行操作了。

第三部分是测试集合,这是一个可选部分。它是一套能用来进一步测试LLVM功能和性能的程序。

二、LLVM+Clang的安装

准备工作

LLVM官方是用svn进行版本控制的,因此我们需要安装svn来获取源码。

安装过程中会用到cmake工具来生成Makefile,需要先安装cmake。

sudo apt-get install subversion
sudo apt-get install cmake

构建安装目录

#创建一个目录用来存放llvm源码
mkdir /tmp/llvm_source_build

下载LLVM核心源代码

#下载llvm代码
cd /tmp/llvm_source_build
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm

此时在/tmp/llvm_source_build目录下就会有一个llvm目录。

下载Clang源码

在/tmp/llvm_source_bulid/llvm/tools目录下下载clang。

#下载Clang源码
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

下载 Clang 工具源码(可选)

cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra

下载Compiler-RT 源码(可选)

cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

还有一系列的可选项可以下载安装,这些并不主要,若需要可以查看参考文献2。

配置和安装LLVM+Clang

首先返回到/tmp/llvm_source_build目录下,新建一个build目录。

#新建build目录
cd /tmp/llvm_source_build
mkdir build

使用之前安装的cmake得到Makefile文件

cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_INSTALL_PREFIX=/opt/llvm ../llvm

上面的-CMAKE_INSTALL_PREDIX=/opt/llvm 表示要安装的目录。

得到Makefiile文件之后几可以进行编译和安装了

make -j 8
sudo make install

最后还需要配置一下环境变量。

#配置一下环境变量
vim /etc/profile
#在末尾添加
export PATH=$PATH:/opt/llvm/bin

参考文献:

1.https://www.xuebuyuan.com/3122442.html

2.http://llvm.org/docs/GettingStarted.html

3.https://www.jianshu.com/p/861c1a630059

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装LLVM+Clang教程 的相关文章

随机推荐

  • 深度特征融合---高低层(多尺度)特征融合

    目录 概述 基本概念 典型方法概述 相关工作 多尺度模型设计 Deep Feature Fusion for VHR 高分辨率图像 Remote Sensing Scene Classification DCA特征融合方法 基于神经网络的目
  • session获取与存储

    方法一 首先要明白 session是在服务器端创建并保存在服务器端 当代码中创建session时会相应地创建sessionID保存在服务器端 同时服务器向浏览器响应信息时会以cookie形式 其实就是 JSESSION sessionID
  • 什么是Java?

    刚开始学习Java时 对于老师讲述的Java的发展历程毫无兴趣 觉得只要会用就行了 直到有一天我的朋友突然问我 你们学的Java是什么呀 面对他突如其来的问题 我一下有点不知所措 刚想开口却又不知道说些什么 只能慢慢的吐出那几个字 一门编程
  • IDEA 错误: 找不到或无法加载主类

    问题 问题就是spring boot项目在IDEA中 启动类右键运行 控制台提示 错误 找不到或无法加载主类 xxx xxx xxx xxxx 启动类包名 原因 问题原因 运行启动类的时候代码没有编译到target目录下如下图 发现编译过后
  • ubuntu16.04 安装 pcl1.7

    不使用源码编译的方式 而是使用官网prebuild版本的方式安装 sudo add apt repository ppa v launchpad jochen sprickerhof de pcl sudo apt get update s
  • python指定宽度20输出_Python 以指定宽度格式化输出

    Python 以指定宽度格式化输出 2020 05 07 当对一组数据输出的时候 我们有时需要输出以指定宽度 来使数据更清晰 1 mat 20 t 28 t 32 print mat format 占4个长度 占8个长度 占12长度 2 如
  • JS关于Object.assign()和浅拷贝、深拷贝

    什么是浅拷贝和深拷贝 js中存对象都是存地址的 浅拷贝指向的是同一块内存区块 深拷贝则是另外开辟了一块区域 两个例子 var obj1 num 100 str abc var obj2 obj1 obj2 num 200 console l
  • 图像处理神器 ImageMagick 命令介绍

    安装完 ImageMagick 打开命令行 输入相应命令即可处理图像 所有命令前面都要加 magick 网上的教程都没说 也可能是我自己环境没配置吧 说明 内的命令表示是可选的 内表示是示例或者代号而已 magick convert sou
  • 每日写题分享--机器人的运动范围//DFS深度优先搜索/递归

    题目描述 题目链接戳此 解题思路 这题和上题矩阵中的路径可以对比起来看 同样也是深度优先搜索 DFS 由于机器人从 0 0 位置向下向右探索 右边的下面和下面的右边可能会重复 所以可以将走过的路径记录下来置为true防止重复走 代码实现如下
  • 电脑一体机电脑,一体机电脑哪款好_一体机电脑品牌推荐【热门机型】-太平洋IT百科...

    一体机电脑哪款好 一体机电脑将主机部分和显示器部分高度集成在一起 因此一体机电脑被厂商称为All In One AIO电脑或屏式电脑 优秀的外观设计加上良好的硬件性能 一体机电脑成为很多家庭甚至是办公用户的选择 我们不妨从一体机电脑的背景开
  • PDF如何解密?介绍几个简单小方法

    PDF格式是我们常见的文件格式 平时学习或者工作的文件都是以PDF格式来发送的 一方面因为它不能随便进行编辑 一方面是因为它还可以设置加密 但是设置加密很简单 后续需要对加密文档进行修改编辑的时候就不简单了 每次打开都需要输入密码 操作步骤
  • pinia 实战IM----注册TIM-plugin插件

    目录 初始化TIM实例 定义参数类型 扩展pinia插件 添加新的属性 添加新的选项 标注插件类型 为新的定义选项添加类型 为新的 state 添加类型 初始化pinia TIM插件 扩展 pinia属性 与 选项 仓库中使用 pina中注
  • openGauss学习笔记-59 openGauss 数据库管理-相关概念介绍

    文章目录 openGauss学习笔记 59 openGauss 数据库管理 相关概念介绍 59 1 数据库 59 2 表空间 59 3 模式 59 4 用户和角色 59 5 事务管理 openGauss学习笔记 59 openGauss 数
  • PX4log文件分析工具

    功能介绍 该工具可读取PX4存储的bin文件 自动将其进行解析 解析后可根据需求 选择需要导出的数据 将数据导出到txt文件中 几点说明 应用场景 需要将飞行数据导入到matlab中 对数据进行分析 使用原始的sdlog2pumy py文件
  • vue页面自适应屏幕宽高_Vue+Element UI 高度实时自适应

    本文章是我一个实习两个月的练习生 在项目中遇到的问题 在此记录 防治以后再踩坑 Element ui 本身使用的Container 布局容器 组件采用 flex 布局 所以用了它的布局就可以做到宽度实时自适应 当我想试试高度是否自适应时发现
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • qt用mingw编译时报错 multiple definition of

    网上相关回答不少 但过于简单 这里做一下记录 qt用mingw编译程序时报 multiple definition of 这个错误 错误信息大概是如下图所示 首先 检查自己的程序是否真的有重定义 头文件循环包含等问题 若确定没有 则是由于方
  • 基于机器视觉的布匹疵点检测——新视智科

    人工智能验布系统 布匹的疵点检测是纺织工业中的一个十分重要的环节 当前 纺织工业的布匹缺陷检测领域 人工检测仍然是主要的质量检测方式 而近年来由于人力成本的提升 以及人工检测存在的检测速度慢 漏检率高 一致性差 人员流动率高等问题 越来越多
  • 渗透测试信息收集方法和工具分享

    文章目录 一 域名收集 1 OneForAll 2 子域名挖掘机 3 subdomainsBurte 4 ssl证书查询 二 获取真实ip 1 17CE 2 站长之家ping检测 3 如何寻找真实IP 4 纯真ip数据库工具 5 c段 旁站
  • 安装LLVM+Clang教程

    目录 前言 一 LLVM简介 二 LLVM Clang的安装 前言 最近可能要学习编译器相关的知识 因此总结一下LLVM的安装方法 以防忘记如何安装 接下来就是正式的安装过程了 分割线 一 LLVM简介 LLVM是Low Level Vir