WSL2 Ubuntu22.04编译安装LLVM

news2024/10/27 9:25:00

前提

这两天因为工作需要,要编译一个Debug版本的llvm。这里对编译安装过程进行一个简单的记录,同时也记录下这个过程中遇到的几个问题。

下载源码并编译

有关llvm编译安装的官方文档在这里。

  1. git仓库clone llvm的源码。

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

    这样拉取下来的源码肯定是最新的,如果你想安装之前版本的llvm,可以先使用git branch察看都有哪些版本,然后git checkout xxx切换对应的版本即可。

  2. 编译。

    cd llvm-project/
    mkdir build
    cd build
    cmake ../llvm -G Ninja -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD="RISCV" -DLLVM_USE_LINKER=lld -DCMAKE_INSTALL_PREFIX=/home/wjq/workspace/llvm 
    ninja check-llvm
    

    这里有几点要注意的:

    • 使用了Ninja构建系统,这比使用make要快一点。
    • -DCMAKE_BUILD_TYPE=Debug:编译类型是Debug
    • DLLVM_TARGETS_TO_BUILD="RISCV":目标平台是RISCV
    • 使用lld来加快链接速度。
    • 安装llvm时的根目录是/home/wjq/workspace/llvm
    • 没有添加任何的子项目,因此只会编译llvm
    • 没有使用官网上的-S llvm的方式,而是使用了../llvm,使用第一种方式的话如果编译失败的话会在llvm-project/目录下产生很多中间文件,第二种就算失败了也只是在llvm-project/build/目录下,不会影响源码。
    • 想要了解更多有关cmake的先项,请看官网这里。
  3. 安装。
    如果上面的步骤都没有问题的话,接下来就可以安装了。

    ninja install
    

    这会将编译出的llvm安装到/home/wjq/workspace/llvm目录下。一共有四个文件夹:binincludelibshare

  4. llvm添加到环境变量。
    使用vim ~/.bashrc打开~/.bashrc,然后添加export PATH=/home/wjq/workspace/llvm/bin:$PATH,保存退出然后重新source ~/.bashrc即可。
    如果想为所用用户添加llvm的话,就在/etc/profile文件中添加。

  5. 察看环境变量是否添加成功
    在终端输入llvm-as --version,若输出llvm的版本则代表安装成功。

以上就是llvm编译安装的所有步骤。

一些可能出现的Bug

git clone速度慢

解决方案:如果你使用的是代理的话,请打开TNU模式。这会代理所有的应用,包括WSL2中的网络。

编译中途卡死

现象:如果你编译过程中的link阶段总是无源无故卡死。
原因:我当时安装了starship这个bash美化工具,编译时间太长就会卡死没有反应。
解决方案:我是直接卸载了这个工具。

collect2: fatal error: ld terminated with signal 9 [Killed]

原因:如果在link阶段出现这个错误,则很有可能是内存不够用。
解决方案:设置-DLLVM_PARALLEL_LINK_JOBS=1来控制链接的并行度,然后重新cmake即可。

g++: internal compiler error: Killed (program cc1plus)

原因:如果出现这个问题的话,可能是因为交换区太小了。
解决方案:扩大交换区,如下:
在这里插入图片描述
为了更方便,可以将第一行代码更换为sudo dd if=/dev/zero of=/swapfile bs=1024 count=50000000,意思是将swap交换区扩大到50G。可以使用free -m察看交换区大小。

参考链接

  1. https://zhuanlan.zhihu.com/p/431519638
  2. https://stackoverflow.com/questions/30887143/make-j-8-g-internal-compiler-error-killed-program-cc1plus
  3. https://blog.csdn.net/weixin_43669978/article/details/132480778

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA搭建PCIE3.0通信架构简单读写测试,基于XDMA中断模式,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博客方案的PCIE2.0版本 3、PCIE基础知识4、工程详细设计方案工程设计原理框图XDMA配置及使用XDMA中断模块数据缓存架构用户逻辑Windows版本XDMA驱动安装Linux版本XDMA驱动安装测试应用程序工程源码架构PCIE上板…

电磁场-Laplace算子与冲激函数的关系

csdn重新打一遍公式太麻烦了。欢迎转到我的知乎账号上查阅原版文章,也可后台私信我发送原版PDF或者markdown。 电磁场-Laplace算子与冲激函数的关系 - 知乎 下面的文章是一张超大的图片。

论1+2+3+4+... = -1/12 的不同算法

我们熟知自然数全加和, 推导过程如下, 这个解法并不难,非常容易看懂,但是并不容易真正理解。正负交错和无穷项计算,只需要保持方程的形态,就可以“预知”结果。但是这到底说的是什么意思?比如和…

C++扑克牌(poker)2024年CSP-J认证第二轮第一题 CCF信息学奥赛C++ 中小学初级组 第二轮真题解析

目录 C扑克牌(poker) 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C扑克牌(poker) 2024年CSP-J认证第二轮第一题 一、题目要求 1、编程实现 小 P 从同学…

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式   ;Extend装饰器:定义扩展组件样式   自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】 目录 应用打包HAP、HAR、HSPModule类型HAPHAR创建HAR建立依赖HAR共享内容 HSP创建HSP建立依赖同上HSP共享内容同上 HAR VS HSP 应用打包HAP、HAR、HSP 一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发…

【哈工大_操作系统实验】Lab9 proc文件系统的实现

本节将更新哈工大《操作系统》课程第九个 Lab 实验 proc文件系统的实现。按照实验书要求,介绍了非常详细的实验操作流程,并提供了超级无敌详细的代码注释。 实验目的: 掌握虚拟文件系统的实现原理;实践文件、目录、文件系统等概念…

【C++开篇】

首先初阶的数据结构相信大家已经学习的差不多了,关于初阶数据结构排序的相关内容的总结随后我也会给大家分享出来。C语言和C有许多相同的地方,但也有许多不相同的地方。接下来的C部分,我们主要是针对C与C语言不同的地方来与大家进行分享。其中…

量子变分算法 (python qiskit)

背景 变分量子算法是用于观察嘈杂的近期设备上的量子计算效用的有前途的候选混合算法。变分算法的特点是使用经典优化算法迭代更新参数化试验解决方案或“拟设”。这些方法中最重要的是变分量子特征求解器 (VQE),它旨在求解给定汉密尔顿量的基态,该汉密尔…

这是一篇vue3 的详细教程

Vue 3 详细教程 一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架,用于构建用户界面。Vue 3 是其最新版本,带来了许多新特性和性能优化,使开发更加高效和灵活。 二、环境搭建 安装 Node.js 前往Node.js 官方网站下载并安装适合你…

WPF+MVVM案例实战(六)- 自定义分页控件实现

文章目录 1、项目准备2、功能实现1、分页控件 DataPager 实现2、分页控件数据模型与查询行为3、数据界面实现 3、运行效果4、源代码获取 1、项目准备 打开项目 Wpf_Examples,新建 PageBarWindow.xaml 界面、PageBarViewModel.cs ,在用户控件库 UserControlLib中创建…

WASM 使用说明23事(RUST实现)

文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性: 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码(js引用)3.2 访问页面4 导入js function4.1 编写lib.rs文件,内容…

UML 总结(基于《标准建模语言UML教程》)

定义 UML 又称为统一建模语言或标准建模语言,是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。尽管UML 本身没有对过程有任何定义,但UML 对任何使用它的方法(或过程)提出的要求是:支持用…

【含开题报告+文档+PPT+源码】基于vue框架的东升餐饮点餐管理平台的设计与实现

开题报告 在当前信息化社会背景下,餐饮行业正经历着由传统线下服务模式向线上线下深度融合的转变。随着移动互联网技术及大数据应用的飞速发展,用户对于餐饮服务平台的需求也日益多元化和个性化。他们期望能在一个集便捷、高效、个性化于一体的平台上完…

自动化测试工具Ranorex Studio(十六)-添加新Action

在Action表中,有两种手动添加action的方式。 一种方法是指定Action本身(’添加新Action’),然后分配对应的对象库条目(在多数情况下)。 第二种方法是直接把对象库条目拖放到Action表内,然后生成…

力扣 中等 2466.统计构造好字符串的方案数

文章目录 题目介绍题解 题目介绍 题解 题意:每次可以爬 zero 或 one 个台阶,返回爬 low 到 high 个台阶的方案数。 和上题337.组合总和 (链接)的思路一样,只不过是将可以爬的台阶数从数组换成了两个数(ze…

视频美颜平台的搭建指南:基于直播美颜SDK的完整解决方案

众所周知,直播美颜SDK是实现视频美颜功能的核心。本文将详细解析如何基于直播美颜SDK搭建一个完整的视频美颜平台。 一、视频美颜SDK的核心功能 直播美颜SDK作为平台的技术核心,能够提供丰富的美颜效果和稳定的视频处理能力。通常,SDK具备以…

iOS AVAudioSession 详解【音乐播放器的配置】

前言 在 iOS 音频开发中,AVAudioSession 是至关重要的工具,它控制着应用的音频行为,包括播放、录音、后台支持和音频中断处理等。对于音乐播放器等音频需求强烈的应用,设计一个合理的 AVAudioSession 管理体系不仅能保证音频播放…

RabbitMQ是一个开源的消息代理和队列服务器

RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)协议实现,同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务,RabbitMQ在分…

青少年CTF平台的基础题writeup

青少年CTF平台 1、文章管理系统 首先他这里有一个问号id,就想着使用mysql跑一下,但是windows的sqlmap很不给力,都不动,所以我后面换成了kali机来跑 跑一下就跑出了好多的数据库 第一次我使用ctftraining不出货,跑的一…