在Ubuntu上编译安装LLVM

2023-11-06


Motivation

两周前实验室要求我配置一个叫Speedy.js的编译器,配置这个编译器需要先配置好LLVM。根据这个编译器作者的教程,乱七八糟配置了一通,踩过一些坑,碰过一些雷,浪费了很多时间。花了两周时间,终于全套配置完成,因此想写个教程,留点知识给以后的自己和需要的各位。Speedy.js不好说,但是LLVM这东西以后有大概率会用的上。


环境

这是我这次配置LLVM过程中最大的一个坑,因为耗费了将近40%的时间。一定不要在Windows上配!一定不要在Windows上配!一定不要在Windows上配! 重要的话说三遍。
一般情况下,普通的DOS指令在Windows下和Linux下是一样,但是差异也是有的,比如,教程里有一句:

cmake --build . --target install -- -j4

关键在于最后的-j4,作者是这么说的:

The -j4 defines how many processes are used to build LLVM. A good
choice is to use the number of cores + 1.

意思就是,这个-j4代表了可以指定多少个进程来执行这个操作,推荐设置为CPU核心数+1。
但是,要命的是,微软的MSBuild编译器不识别这个子命令,会报以下的错误:
MSBuilder -j4指令报错

之后查了一查,-jx这种子命令是Linux系统下的,因此就装了个VMWare,弄了一个Ubuntu的虚拟机,重配。

Git

Git是什么我就不多说了,自行BaiDu,首先你需要给自己的虚拟机或者Linux电脑里安装Git。
首先,开个控制台(Terminal),在系统根目录(Home)下,输入以下命令:

$ apt-get install git

等待一会儿就能自动安装好。


下载LLVM源码

现在我们已经装好Git了,就可以用Git指令下载安装东西了。
新开一个控制台或者退回到根目录下面,执行下面的命令创建一个临时文件夹(存源码用的),并进入这个文件夹:

$ mkdir LLVM_Temp && cd LLVM_Temp

然后依次执行下面两条指令:

$ git clone https://github.com/llvm-mirror/llvm.git
$ cd llvm

注意,上面这两条里面的第一条会下载llvm的源码,如果带宽不高的话会比较慢,耐心等着,别按键盘上的任何按键。完成之后再敲第二句。

然后,再依次执行下面这四句:

$ cd tools
$ git clone https://github.com/llvm-mirror/clang.git
$ cd ..
$ mkdir build && cd build

ok,到这里为止,下载源码的工作就完了。


CMake

因为后面的编译工作需要用到这个东西,所以在这里说一下它的安装。
进入官方下载地址:https://cmake.org/download/,下载第一个压缩包:
CMake压缩包选择
下载好之后解压到根目录,然后另起一个新的控制台,进到刚刚解压cmake的文件夹,如:

$ cd cmake-3.10.1

并依次执行以下操作:

$ ./configure
$ make
$ make install

执行完这些操作,CMake这个工具就安装完了。


编译

此时,在当前的控制台中,回到根目录,创建一个LLVM文件夹(这个是最后安装LLVM的文件夹),不用进去,然后关掉这个控制台。回到最初的那个控制台,现在应该在build文件夹中,执行下面的指令:

$ cmake -DLLVM_TARGETS_TO_BUILD=host -DCMAKE_INSTALL_PREFIX=~/LLVM -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DCLANG_INCLUDE_TESTS=OFF ..

注意:上面这段代码是一行,中间是空格,不是回车。

这个命令实际的功能是编译LLVM源码,过程将持续2~4个小时(SSD高玩请忽略)。


安装

编译完成后,执行下面的操作就可以完成安装了:

cmake --build . --target install -- -j3

这个数字3前面已经提过了,推荐设置为你的CPU核心数+1,我给虚拟机分配了两核,所以是3。


文件链接

这个操作是我学习到的一个额外的点。一般情况下你想运行一个可执行文件,就需要用控制台进入到对应的目录中去,如果想打开控制台直接在全局中使用,就需要做文件链接。
起一个新的控制台,输入以下命令:

$ ln -s ~/LLVM/bin ~/bin

这句指令的作用是将根目录下的bin目录和LLVM的bin目录链接起来,系统接收到去根目录下(全局)找文件的指令时,就会根据映射去LLVM的bin里面找。

更加详细的有关于ln指令的知识请移步:
http://man.linuxde.net/ln


验证

最后一步,验证一下LLVM是否成功编译,成功安装。
随便哪个控制台,在根目录下执行以下命令:

$ llvm-config --targets-built

如果输出中包含WebAssembly这个关键字,那么恭喜你,你机器上的LLVM已经编译、安装成功!


后记

没有做文件链接这一步的同学,需要进入到LLVM的bin目录中去再执行验证的指令。

我的邮箱是:implementist@outlook.com,CSDN的博客我不常登上来看,有问题的同学可以发邮件来问。

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

在Ubuntu上编译安装LLVM 的相关文章

随机推荐

  • CUnit用法总结

    简介 CUnit是一个用C语言写的单元测试库 它是一个简单的测试框架 提供了丰富的断言语句来测试常用的数据类型 此外 对于跑测试用例和反馈测试结果 CUnit都有一些不同的接口 它可以编译成动态库或者静态库 基本框架 CUnit是一个可以跨
  • sqlhelper集成dynamic多数据源的分页问题(非教学向)

    一 问题描述 最近接手 顶锅 了公司的框架维护工作 第一项任务就是集成dynamic多数据源框架 dynamic官方使用文档 本文不是教学 有兴趣的小伙伴可以自己查阅文档 集成dynamic之后 一切都很顺利 但是测试到SQLHelper框
  • SQLITE学习之SQLITE基础知识(一)

    1 SQLITE常见命令 sqlite常用命令被称为 SQLite 的点命令 这些命令的不同之处在于它们不以分号 结束 我们只需在ubuntu终端界面上的命令提示符 下键入一个简单的 sqlite3 命令 在 SQLite 命令提示符 gt
  • python解数独

    在学典型优化问题模型与算法的时候发现 暑假的解数独的部分 可以设计三个模型 比如唯一余数 基础摒除法等 让他们循环运行 同时设计一个步数 多次循环来找到步数最少的解题路径 当然还会遇到这三个模型解决不了的问题 这时候就需要增加模型了 sud
  • docker save和docker export区别

    两者区别 docker save用于导出镜像到文件 包含镜像元数据和历史信息 docker export用于将当前容器状态导出至文件 类似快照 所以不包含元数据及历史信息 体积更小 此外从容器快照导入时也可以重新指定标签和元数据信息 一 导
  • LINUX 系统编程之文件IO

    文件IO 属于系统IO 是系统内核向用户空间提供的接口 直接调用内核提供的系统调用函数 头文件是unistd h 1 open char s flag mode 在fcntl h头文件种声明 函数的作用 创建或打开某个文件 最多包含三个参数
  • java bean对象属性复制,将一个对象的属性值赋值给另一个对象,对象之间的复制方法

    注意依赖 springframework下的复制顺序为 目标对象 新对象 import org springframework beans BeanUtils public static void main String args Inte
  • java 获取 sessionid_通过sessionid获取session方法

    使用HttpSessionListener来监听session的创建和销毁 首先创建HttpSessionListener的实现类 SessionListeners java packagecom test importjava util
  • 【详细学习Docker部署搭建高可用的MySQL集群环境】

    一 MySQL高可用集群搭建 MySQL集群搭建在实际项目中是非常必须的 接下来我们来学习通过PXC Percona XtraDB Cluster 来实现强一致性数据库集群搭建 1 1 MySQL集群搭建 1 1 1 中央仓库查找相关镜像
  • 三年级计算机考试题目及答案,三年级信息技术试题及答案.doc

    三年级信息技术试题及答案 三年级信息技术期末试题 学校 班级 姓名 分数 一 单项选择题 共10题 每小题4 共计40分 1 计算机的心脏是 显示屏 鼠标 2 输入汉字时我们需要选择输入法 是我们使用的输入法之一 它的名字叫 五笔输入法 智
  • 【刷题笔记7】LeetCode 54. 螺旋矩阵(数组模拟)

    用分享的方式成长 用有趣的眼光看世界 欢迎来到12 26 25的博客 热爱编码 算法 知识总结 不定期更新有趣 有料 有营养内容 让我们共同学习 共同进步 系列索引 刷题笔记0 系列目录索引 持续更新 推荐收藏 本题题目 LeetCode
  • NVIDIA FasterTransformer

    NVIDIA FasterTransformer NVIDIA GPU计算专家团队针对transformer推理提出了性能优化方案 FasterTransformer 截止到2022年7月 这套方案支持的模型涵盖了BERT GPT Long
  • Mybatis整合Spring -- typeAliasesPackage

    Mybatis 整合 Spring integration MapperScannerConfigurer Mybatis整合Spring 根据官方的说法 在ibatis3 也就是Mybatis3问世之前 Spring3的开发工作就已经完成
  • python时间计算 周开始第一天和结束天 通过年周计算

    python def year mon for check year week 通过年周获取当前月 按每周最后一天的月份比对 最后一天为周日 end year week str year str week 0 end week result
  • xss入门闯关详解6-10关

    继续进行6 10关 第6关 简单的尝试之后发现闭合掉了 尝试空格或者大小写 tab绕过 大小写成功绕过 Onclick alert 1 第七关 老样子 value gt click alert 1 gt value gt lt gt ale
  • 取消idm下载器和google浏览器的关联(让谷歌浏览器禁止使用idm插件)

    https jingyan baidu com article 597035529ae46b8fc107405d html IDM下载安装成功之后 会自动默认关联你电脑上的所有浏览器 在使用浏览器下载的时候自动会变成IDM下载 如果不想让I
  • 2018-2019-2 网络对抗技术 20165335 Exp2 后门原理与实践

    一 基础问题回答 1 例举你能想到的一个后门进入到你系统中的可能方式 钓鱼网站 搞一个假网站 假淘宝 盗版电影 文库下载文档什么的 下载东西的时候把带隐藏的后门程序附带下载进去 自启动 反弹连接 搞一个小网站 用iframe标签跳转到危险网
  • 自动化测试工具Parasoft c++ test v2021.1全新发布,简化嵌入式测试

    随着Parasoft C C test 2021 1的发布 嵌入式测试和开发团队获得了现代高度自动化CI CD管道的速度和效率 最新版本为团队提供了完全集成的静态和单元测试 以实现持续合规性和质量的交付 新版本继续全面支持最新的合规标准 包
  • 几种查找的时间复杂度

    1 顺序查找 1 最好情况 要查找的第一个就是 时间复杂度为 O 1 2 最坏情况 最后一个是要查找的元素 时间复杂度未 O n 3 平均情况下就是 n 1 2 所以总的来说时间复杂度为 O n 2 二分查找 O log2n gt log以
  • 在Ubuntu上编译安装LLVM

    章节索引 Motivation 环境 Git 下载LLVM源码 CMake 编译 安装 文件链接 验证 后记 Motivation 两周前实验室要求我配置一个叫Speedy js的编译器 配置这个编译器需要先配置好LLVM 根据这个编译器作