搭建 llvm 学习环境

2023-11-10

1. 下载llvm

 git clone https://github.com/llvm/llvm-project.git

因为国内网络的原因,clone的时候没有反应,可以多此 Ctrl + C 重新 clone
在这里插入图片描述

2. 下载安装cmake

注意:下载的cmake版本必须是 3.13.4 及以上的,否则你后面编译 llvm 会报下面的错误

CMake Error at CMakeLists.txt:3 (cmake_minimum_required):
CMake 3.13.4 or higher is required.  You are running version 3.10.2

如果你之前安装的cmake 版本低于 3.13.4,你需要卸载cmake,并且去 /usr/share 目录下,删掉 cmake 和 cmake+版本号 这些文件

#删除cmake
sudo apt -y remove cmake
#进入/usr/share目录
cd  /usr/share
#先敲cmake,然后连续敲两下Tab键,查看所有cmake开头的文件
cmake
#删掉 cmake 和 cmake+版本号 这些文件,这里我没有cmake+版本号的文件,你有的话要自己删掉
sudo rm -rf cmake

注意:不要使用 sudo apt install cmake 下载,这样下载的版本会很旧,一定要去官网下载

cmake官网链接

在这里插入图片描述

#解压
tar xf cmake-3.24.0-rc2-linux-x86_64.tar.gz
#将 cmake-3.24.0-rc2-linux-x86_64 剪切到 /usr/share 目录,并且命名为 cmake-3.24.0-rc2-linux-x86_64
sudo mv cmake-3.24.0-rc2-linux-x86_64  /usr/share/cmake-3.24.0-rc2-linux-x86_64
#将 /usr/share/cmake-3.24.0-rc2-linux-x86_64/bin/cmake 软连接到 /usr/bin/ ,并且给软连接命名为 cmake,这样就能执行cmake了
sudo ln -sf /usr/share/cmake-3.24.0-rc2-linux-x86_64/bin/cmake    /usr/bin/cmake
cmake --version

在这里插入图片描述

3. 下载安装python

因为Ninja编译依赖于python,所以先安装python(先下载ninja也可以)

sudo apt install python

在这里插入图片描述
验证安装成功
在这里插入图片描述

4. 安装gcc g++

否则编译 ninja 会报错找不到 c++

sudo apt-get install gcc
sudo apt-get install g++

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11
sudo apt install g++-11

#查看是否安装成功
ls /usr/bin/gcc* 
ls /usr/bin/g++* 

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 50

gcc --vesion
g++ --version

5. 下载ninja

cd ~
mkdir ninja
cd ninja/
git clone https://github.com/ninja-build/ninja.git

在这里插入图片描述

6. 编译ninja

cd ninja
./configure.py --bootstrap

在这里插入图片描述

7. 安装 ninja

将编译好的Ninja 拷贝到 /usr/bin
在这里插入图片描述

sudo cp ./ninja  /usr/bin

在这里插入图片描述
验证安装成功

ninja --version

在这里插入图片描述

8. 编译 llvm

cd ~/llvm
cd llvm-project/
mkdir build
cd build/
cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS='mlir;clang;lldb;lld' -DLLVM_BUILD_EXAMPLES=ON  -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON

在这里插入图片描述
最后的编译命令中的 …/llvm 指的是 build 目录上一级目录中的 llvm 目录

ninja -j16

一般会报错:虚拟内存不够(注意这里指的是内存条不够,不是磁盘不够!)

virtual memory exhausted: Cannot allocate memory

在这里插入图片描述

9. 解决报错

关闭这个虚拟机
在这里插入图片描述

设置内存大小为16GB
在这里插入图片描述

10. 重新编译

将原来的 build 目录删掉

cd ~/llvm/llvm-project
rm -rf build

重建 build 目录,重新编译

cd ~/llvm/llvm-project
mkdir build
cd build
cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS=mlir -DLLVM_BUILD_EXAMPLES=ON  -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON
ninja -j8

11. 下载安装 vscode

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建文件夹

cd ~
mkdir llvm_test

安装 c/c++插件
在这里插入图片描述
打开 创建好的 llvm_test文件夹
在这里插入图片描述

在这里插入图片描述

https://godbolt.org/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

搭建 llvm 学习环境 的相关文章

  • 无法为 Python 3.4 创建工作虚拟环境

    I 安装Python 3 4 2 https docs python org 3 using unix html building python和我的 Linux Mint 17 1 中的 Virtualenv 12 0 5 然后我尝试创建
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 原生 Linux 应用程序可像 ResHacker 一样编辑 Win32 PE

    我想运行自动修改 dll服务 用户提交特定的 dll 我在服务器上修改它 然后用户可以下载 dll的修改版本 是否有任何本机 Linux 应用程序提供常见的 Win32 PE 修改功能 例如图标 字符串 加速器 对话等 至少提供命令行或脚本
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • perf stat中的cycles注释是什么意思

    8 014196 task clock 0 004 CPUs utilized 204 context switches 0 025 M sec 32 cpu migrations 0 004 M sec 0 page faults 0 0
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显

随机推荐

  • vscode给某行代码添加标签

    只有你习惯于一种编程工具风格 vscode几乎都能给你做的 Numbered Bookmarks 数字标签跳转类似与webstrom 定义 Ctrl SHIFT 数字 跳转 Ctrl 数字 vscode给某行代码添加标签 标注 用于代码间快
  • Qt使用QJSEngine执行脚本

    有时候需要进行一些计算 程序是使用c 来实现的 使用c 来进行计算不是很灵活 这时候可以使用脚本来进行计算 这样灵活 且易于扩展 写了一个简单的Demo进行验证 具体例子如下 include
  • Java - 带参的异常处理模块try(xxx){...}

    带资源的try语句 try with resource 的最简形式为 try Resource res xxx 可指定多个资源 do something try块退出时 会自动调用res close 方法 关闭资源 其实这样做的原因 主要是
  • mysql24,Mysql24之事务隔离级别和MVCC

    TOC 事前准备 为了故事的顺利发展 我们需要创建一个表 CREATE TABLE hero number INT name VARCHAR 100 country varchar 100 PRIMARY KEY number Engine
  • mmdetection 中 Mask Rcnn检测结果可视化(DICE计算、PR曲线绘制等)

    mmdetection中的Mask Rcnn是一个很不错的检测网络 既可以实现目标检测 也可以实现语义分割 官方也有很详细的doc指导 但是对新手来说并不友好 刚好之前笔者写的mmlab系列里面关于可视化都还没有一个详细的文档 也在此一并介
  • 逆向破解之破解补丁与劫持Dll

    破解补丁 前言 破解补丁的作用是修改程序内存地址的硬编码 以此来实现破解软件 这是常见的JE跳转用来判断注册码是否正确 若401108位置的汇编指令给Nop掉就能实现破解 编写代码 1 C语言 运行程序后输入要破解的程序进程ID inclu
  • yolov5源码解读--训练策略

    yolov5源码解读 训练策略 超参数解读 命令行参数 train 模型迭代 测试 超参数解读 hyp scratch yaml lr0 0 0032 初始学习率 lrf 0 12 使用余弦函数动态降低学习率 lr0 lrf momentu
  • spark入门小例子

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1221 1 pyspark 2 spark shell spark网页管理页面 http 127 0 0 1 4040 jobs 3 设置日
  • Redis常见数据结构的常用命令及引用

    String 1 常用命令 字符串常用操作 SET key value 存入字符串键值对 MSET key value key value 批量存储字符串键值对 SETNX key value 存入一个不存在的字符串键值对 GET key
  • AVLTree-平衡二叉树-coming soon

  • php验证用户账号密码正确,php-检查用户名和密码是否正确

    因为我的代码是正确的 所以我总是得到回显 Username Passwordcorrect 用户名 密码是否匹配 我的问题是 我在下面的代码中为PHP总是回显 用户名 密码错误 而做错了什么 require privstuff dbinfo
  • jupyter notebook使用基础及其快捷键,包括对文档操作、cell操作、快捷键、markdown

    目录 Jupyter Notebook介绍 使用原因 基本操作 新建notebook文档 对文档的操作 cell操作 什么是cell Jupyter支持两种模式 鼠标操作 Jupyter快捷键操作 markdown演示 手动建导航 Jupy
  • 网络编程 - Java SSLSocketFactory 创建方式

    SSL TLS 认证需要服务端提供 KeyStore jks TrustStore jks 实现方式 优缺点 服务端提供 CA Client CRT Client Key 文件 缺点 服务端提供原始签名 不安全不建议采用 服务端提供 Key
  • linux $0命令,Linux:awk命令详解

    简单使用 awk 对于文件中一行行的独处来执行操作 awk F print 1 4 使用 来分割这一行 把这一行的第一第四个域打印出来 AWK命令介绍 awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息 awk抽取信息后 才
  • 2023最新pycharm详细安装教程,小白必看

    一 python官网 Python官网主要有python的About 简介 Downloads 下载 Documentation 文档 Community 团体 Success Stories 成功案例 News 新闻 Events 事件动
  • 贪吃蛇智能版(专家)

    在高级版本的基础之上 主要针对以下问题进行了处理 当长度逐渐变成 超过100之后 随机wander 追尾有比较大的随机性 弄不好就把自己围死了 这个时候已经不能再看到实物马上就去吃了 在吃之前必须先调整好自身的状态 等到认为调整的差不多的时
  • 如何在sqlserver建立新用户并关联相应的数据库

    我们经常需要在数据库上建立有权限的用户 该用户只能去操作某个特定的数据库 比如该用户只能去读 去写等等 那么我们应该怎么在sqlserver上设置呢 下面的步骤有点长 只要一步一步跟着设置就行 方法 步骤 如果你没有开通sqlserver身
  • GoWeb开发-3.JWT

    1 导入依赖库 go get u github com dgrijalva jwt go 2 生成token import fmt github com gin gonic gin jwt github com dgrijalva jwt
  • 将树莓派上的文件发送到服务器,怎样将树莓派变成网络文件系统版本4服务器...

    简介 网络文件系统 NFS 可以同时在版本2 3 4中运行 NFS版本4 NFSv4 在NFSv2和NFSv3 我最喜欢的改进是 NFSv4使配置防火墙变得简单 因为NFSv4仅使用一个端口 默认为2049 而NFSv2和NFSv3使用4个
  • 搭建 llvm 学习环境

    1 下载llvm git clone https github com llvm llvm project git 因为国内网络的原因 clone的时候没有反应 可以多此 Ctrl C 重新 clone 2 下载安装cmake 注意 下载的