WSL2 Ubuntu22.04编译安装LLVM

前提

这两天因为工作需要,要编译一个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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SD-WAN企业组网的应用场景

SD-WAN(软件定义广域网)能够实现企业不同站点之间的高效互联,确保分支机构、总部、数据中心以及云平台等站点的顺畅通信。本文将探讨从企业的WAN业务需求出发,可以将SD-WAN的组网场景分为哪几类。 SD-WAN的典型组网场景 企业站点之…

Docker中如何控制服务启动顺序实现探讨

文章目录 一、Docker概述二、Docker三剑客1. Compose2. Machine3. Swarm 三、简要需求1. 样例工程2. 代码模块3. 调用方向4. 期望启动顺序 四、思路分析1.各走各路1.)docker-compose -f指定不同配置文件2.)docker-compose up -d service-name指定服务名3…

基于SpringBoot的高校体测管理系统设计与实现(源码+定制+开发)高校体测记录系统设计、高校体测信息管理平台、智能体测管理系统开发、高校体测记录系统设计

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

如何将markdown文件转换为pdf

最近笔者在用vscode写markdown,但是提交时往往需要交pdf。所以就涉及到如何将markdown转化为pdf格式。 首先,需要在vscode上安装插件 markdown Preview Enhanced 之后在vscode的右上角即可看到下述图标,点击,vscode右半面就会显示…

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

VulkanTutorial(1·简述,vs环境搭建)

介绍: 与OpenGL,WebGL和Direct3D等API((Application Programming Interface, 应用程序编程接口))相比,valkan更偏向于底层,有更多的GPU控制接口,因此它有更好的性能和更小的驱动开销&#xff0…

检索增强型生成模型RichRAG:为多面查询提供丰富回应

人工智能咨询培训老师叶梓 转载标明出处 大模型在处理静态知识更新和信息准确性方面仍面临挑战。为了解决这些问题,检索增强型生成(RAG)模型应运而生,它们通过检索文档来辅助语言模型生成更可靠的回答。但现有的RAG研究大多集中在…

springboot079信息化在线教学平台的设计与实现(论文+源码)_kaic

信息化在线教学平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了信息化在线教学平台的开发全过程。通过分析信息化在线教学平台管理的不足,创建了一个计算机管理信息化在线教学平台…

【人工智能】——matplotlib教程

文章目录 1.matplotlib简介2.基本绘图功能2.1给图形添加辅助功能2.2在一个坐标系中绘制多个图像2.3多个坐标系显示图像 3.常见图像绘制 1.matplotlib简介 matplotlib 是一个用于创建二维图表和数据可视化的 Python 库,它提供了一种类似于 MATLAB 的绘图接口。matplo…

Mybatis-07.基础操作-环境准备

一.需求说明 二.准备工作

网关三问:为什么微服务需要网关?什么是微服务网关?网关怎么选型?

文章整体介绍 本文旨在解答关于微服务网关的三个核心问题: 1)为什么需要网关?也即在何种场景下应采用微服务网关以优化系统架构; 2)什么是微服务网关?主要讲构成微服务网关的关键能力,包括但…

再传上市消息,奇瑞汽车追赶智能电动的“风”

近日,彭博社引述消息指出,奇瑞控股集团已选择中金公司、广发证券、华泰国际负责安排旗下汽车子公司奇瑞汽车潜在的IPO事宜。奇瑞汽车最早或于明年在香港上市,期望IPO估值超1,000亿元人民币。知情人士表示,审议仍在进行中&#xff…

Compose 修改默认点击效果

Compose 默认点击效果修改 一、Compose的默认点击效果二、实现自己的点击效果 一、Compose的默认点击效果 使用Modifier.clickables可以使Text有点击效果 Text(text "我是Text", modifier Modifier.clickable {})源码分析,点击效果clickable方法中的in…

一文彻底理解 JavaScript 解构赋值

一、基本概念 为什么需要解构呢,先来看一个例子: const student {name: ZhangSan,age: 18,scores: {math: 19,english: 85,chinese: 100} };function displayInfo(student) {console.log(name:, student.name);console.log(math:, student.scores.mat…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目,所以这里就结合一下,在搭建 k8s 集群后安装运维常用服务,比如 ansible 和 prometheus,用 NFS 实现数据存储同步&#xff0c…

CodeQL和数据流分析的简介

文章目录 前言一、CodeQL 简介二、编写污点跟踪查询扩展传播功能 总结 前言 最近,CodeQL使用非常广泛(GitHub 开发的一种强大的静态分析工具)来将代码扫描作为 CI/CD 管道的一部分。其核心是 QL 语言,它用于编写对代码进行推理的…

炒股VS炒CSGO游戏装备,哪个更好做

这个项目,赚个10%都是要被嫌弃的 虽然天天都在抒发自己对股市的看法,但自己自始至终也没有买进任何一支股票。之所以对这个话题感兴趣,着实是因为手上的游戏搬砖项目也是国际性买卖,跟国际形势,国际汇率挂钩&#xff…

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗?K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以在各种环境中高效运行。通过使用Kubernetes,企业可以在自己的数据中心或私有云环境中搭建和管理容器…

鸿蒙开发融云demo消息时间格式化

鸿蒙开发融云demo消息时间格式化 融云没有提供鸿蒙版本带ui的,跟着我一步步搭建起来基本功能。 这次说消息时间格式化 一、消息时间格式化 先看下效果图: 二、关键代码: 看起来简单,但处理起来还是挺麻烦的 // 处理时间函数入…

​​CMU生成式人工智能大模型:从入门到放弃(七)

引言 在前面的系列博客中,我们探讨了生成式对抗网络(GANs)的基本原理和应用。今天,我们将深入探讨变分自编码器(VAEs),这是一种能够学习数据的低维表示并从中生成新数据的生成式模型。 变分自…