LLVM学习-- 构建和安装

news2025/3/19 15:32:16

一 LLVM版本

二 适用预构建的二进制文件安装LLVM

三 适用包管理器安装LLVM

四 从源码构建用于Linux的LLVM

五 从源码构建用于Windows和Visual Studio的LLVM

六 从源码构建用于MacOS 和XCode的LLVM

1.1 LLVM项目从10年前第一次发布到版本3.4,其SVN存储库包含了超过20万次提交,仅仅在2013年,有3万次提交,因此,新功能不断被引入,有些功能页迅速被淘汰了,正如任何大项目一样,开发人员有比较短的开发周期。需要在项目运行良好并通过各种测试时发布稳定的检查点,从而允许用户在使用经过良好测试的版本的同时,体验最新的功能。

LLVM项目在整个发展历史上采用了每年发布两个稳定版本的策略,每次更新将次要版本号增加1。例如,从版本3.3到版本3.4的更新时次要版本更新,一旦次要号码达到9,下一个版本号就会在主版本号加1,就像LLVM 2.9之后更新的LLVM 3.0, 与其前任版本相比,主要修订版本的更新不一定会产生很大的变化,但是与上一个主要版本相比,这个主要版本更新一般代表近5年来编译器的发展过程。

依赖于LLVM的项目通常使用其Trunk 主干版本,即SVN存储库汇总最新可用的版本,然而使用这个版本的代价在于这个版本可能不稳定,最近,从版本3.4开始,LLVM社区致力于修正发布,引入新的修订版本号。这项工作的第一个产品是LLVM 3.4.1。修正发布的目的主要是主干分支修复的补丁包不添加任何新特性的移植到最新版本。

1.2 获取预构建包

LLVM贡献者为特定平台准备了预编译的二进制文件,可以不用自己编译,在某些情况下,编译一个软件可能很棘手。获取LLVM的预构建包的方法有两种,可以通过官方网站获取已经发布的二进制文件的软件包。

1.2.1 获取官方预构建二进制文件

通过访问http://www.llvm.org/release/download.html 可以查看不同版本的所有选项,在Ubuntu13.10 上下载并执行系统范围的LLVM安装,需要获取该文件的URL,使用以下命令

sudo mkdir -p /usr/local; cd /usr/local/

xxxx

至此,LLVM和clang就可以使用了。请记住,需要永久的更新系统的PATH环境变量,因为我们最后一行所做的更新仅仅对当前shell会话有效。可以食用简单的命令执行Clang来测试安装是否成功,比如打印安装的Clang版本号。

clang -v

如果在运行clang的时候遇到问题,尝试直接从安装位置运行二进制代码,以确保你没有遇到Path变量错误配置的问题。如果问题还没有解决,则你下载的预构建文件可能与你的系统环境不兼容。请记住,在编译时二进制文件需要与特定版本的动态链接。如果运行应用程序时出现链接错误。就说嘛你下载的预构建二进制文件与系统的不兼容。

例如,在linux 中,在出现错误信息之后,可以通过打印二进制文件名称和无法加载的动态库的名称来发现链接错误。当屏幕上打印动态库名称时就要注意,说明系统动态库连接器和加载器无法加载该库,因为该程序与当前系统不兼容。

如果要在除windows 以外的其他系统中安装预构建的软件包,遵循相同的步骤。针对Windows 的预构建软件包提供了一个易于使用的安装程序。

1.2.2 使用软件包管理器

软件包管理器应用程序可以用于各种系统,也是获取和安装LLVM Clang二进制文件的简单方法。对于大多数用户来说,这通常是安装LLVM 和Clang的首选方法,因为会自动处理依赖关系的问题,确保你的系统与所安装的二进制文件兼容。

例如 ubuntu 中,应该使用以下指令。

sudo apt-get install llvm clang

在Fedora 18中,使用类似的命令行,但是包管理器不同。

sudo yum install llvm clang

使用快照更新。

也可以从每日构建的源代码快照构建软件包,来自LLVM的字版本控制库的最新修改。

linux

通过debian,和ubuntu linux软件库,可以从LLVM 版本控制库中下载每个编译的快照,可以在http://llvm.org/apt 查看更多详细信息,例如,要在ubuntu 13.10 上安装LLVM和Clang的每日发行版本,用如下命令

sudo apt-get install clang-3.5 llvm-3.5

1.3 从源代码构建

没有预构建的二进制文件的情况下,线获取源代码,然后从头构建LLVM Clang。从源代码构建能够更好的了解LLVM结构,此外,可以微调配置参数,以获取定制的编译器。

1.3.1 系统要求

sudo apt-get install build-essential zliblg-dev python

如果正在使用包含过时软件包的旧版本linux发型版本,尽量更新系统。LLVM源代码对用于执行构建的C++编译器非常苛刻,如果依赖旧的C++编译器,可能导致构建失败。

1.3.2 获取源代码

wget http://llvm.org/release/3.4/llvm-3.4.src.tar.gz

wget http://llvm.org/release/3.4/clang-3.4.src.tar.gz

wget http://llvm.org/release/3.4/clang-tools-extra=3.4.src.tar.gz

1.3.2.2 Git

git clone http://llvm.org/git/llvm.git

git clone http://llvm.org/git/clang.git

1.3.3 构建和安装LLVM

下面将解释构建和安装LLVM的各种方法

1.3.3.1 使用自动工具生成的配置脚本

构建LLVM的标准方法是使用过GNU自动工具创建的配置脚本,生成针对特定平台的Makefile文件,该构建系统支持不同的配置选项,被广泛采用。

--enable-optimized 此选项允许我们在关闭调试和启用优化的情况下编译。

--enable-assertions 此选项在代码中启用断言

--enable-shared 允许我们将LLVM/Clang库构建为共享库

--enable-jit 支持所有目标启用即时编译,

--prefix 安装路径

--enable-targets 允许我们选择编译器输出代码的目标集

在使用相应参数运行configure后,还需要使用经典的make和make install两个命令完成构建,接下来我们给你展示一个例子。

使用unix构建和配置LLVM

在这个例子中,使用一系列命令构建一个未优化(即调试模式下)的LLVM/Clang ,该方法适合于任何基于Unix的系统或者Cygwin。不同之前的例子安装在/usr/local/llvm 目录下。

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

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

相关文章

AIAgent有哪些不错的开源平台

AIAgent领域有许多优秀的开源平台和框架,以下是一些值得推荐的开源平台: AutoGPT AutoGPT 是一个基于 OpenAI 的 GPT-4 和 GPT-3.5 大型语言模型的开源框架,能够根据用户给定的目标自动生成所需提示,并利用多种工具 API 执行多步骤…

Python刷题:流程控制(上)

今天刷的是PythonTip的Python 入门挑战中的题,整体难度不高,适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 每一个拼命努力的人,都像是独自穿越黑暗森林的行者, 没有并肩的身影,唯有孤独如影随形&…

vulhub/Billu_b0x靶机----练习攻略

1.Billu_b0x靶场下载链接: https://download.vulnhub.com/billu/Billu_b0x.zip 2.下载后,解压出ova文件,直接拖至VMware中,重命名和选择存储位置,点击导入,报错点击重试即可。修改网卡为NAT模式。 打开靶…

【YOLOv8】YOLOv8改进系列(8)----替换主干网络之Swin Transformer

主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: 【YOLOv8】YOLOv8结构解读…

Qwen2-Audio:通义千问音频大模型技术解读

引言:从llm到mlm(audio) 大型语言模型(LLM)的发展日新月异,它们在文本理解、生成、推理等方面展现出惊人的能力。然而,交互模态不仅仅依赖于文字,语音、语调、环境音等听觉信息同样承载着丰富的内容。阿里巴巴通义千问团队,推出了 Qwen-Audio 系列模型,这里我们一起…

解决Java多张图合成JPG时出现红色前景及多列自适应适配

目录 前言 一、追本溯源 1、回到最开始 2、合成JPG的异常 二、解决问题 1、关于ImageType 2、TYPE_INT_RGB和TYPE_INT_ARGB 3、问题修复 4、列数自适应的问题 三、总结 前言 在当今数字化信息飞速发展的时代,图像处理技术在各个领域都占据着举足轻重的地位…

SpringBoot实现发邮件功能+邮件内容带模版

发送简单邮件模版邮件 1.pom引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.5.13</version></dependency><dependency><groupId&…

npm 报错 unable to resolve dependency tree

如下图&#xff1a; 解决&#xff1a;npm install --legacy-peer-deps 其实提示上有&#xff1a;npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps

【蓝桥杯每日一题】3.17

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x 他们说内存泄漏是bug&#xff0c;我说这是系统在逼我进化成SSR级程序员 OK来吧&#xff0c;不多废话&#xff0c;今天来点有难度的&#xff1a;二进制枚举 二进制枚举&#xff0c;就是…

Linux:冯诺依曼体系结构、操作系统、进程概念(一.初识进程)

文章目录 1.冯诺依曼体系结构总线与数据传输通路为什么有内存这个部分计算机存储结构 2.操作系统(Operator System)2.1 概念2.2 设计OS的目的2.3 理解“管理”先描述再组织 2.4 用户使用系统调用和库函数&#xff08;lib&#xff09;概念 总结 3.初识进程3.1 基本事实与引入3.2…

动手学深度学习:CNN和LeNet

前言 该篇文章记述从零如何实现CNN&#xff0c;以及LeNet对于之前数据集分类的提升效果。 从零实现卷积核 import torch def conv2d(X,k):h,wk.shapeYtorch.zeros((X.shape[0]-h1,X.shape[1]-w1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i,j](X[i:ih,j:jw…

删除排序链表中的重复元素(js实现,LeetCode:83)

看到这道题的第一反应是使用快慢指针&#xff0c;之前做过类似的题&#xff1a;删除有序数组中的重复项&#xff08;js实现&#xff0c;LeetCode&#xff1a;26&#xff09;原理都是一样,区别是这题需要将重复项删除&#xff0c;所以只需要走一遍单循环就可以实现 /*** Defini…

单片机自学总结

自从工作以来&#xff0c;一直努力耕耘单片机&#xff0c;至今&#xff0c;颇有收获。从51单片机&#xff0c;PIC单片机&#xff0c;直到STM32&#xff0c;以及RTOS和Linux&#xff0c;几乎天天在搞:51单片机&#xff0c;STM8S207单片机&#xff0c;PY32F003单片机&#xff0c;…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

HTML5扫雷游戏开发实战

HTML5扫雷游戏开发实战 这里写目录标题 HTML5扫雷游戏开发实战项目介绍技术栈项目架构1. 游戏界面设计2. 核心类设计 核心功能实现1. 游戏初始化2. 地雷布置算法3. 数字计算逻辑4. 扫雷功能实现 性能优化1. DOM操作优化2. 算法优化 项目亮点技术难点突破1. 首次点击保护2. 连锁…

【Git学习笔记】Git分支管理策略及其结构原理分析

【Git学习笔记】Git分支管理策略及其结构原理分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Git学习笔记 文章目录 【Git学习笔记】Git分支管理策略及其结构原理分析前言一.合并冲突二. 分支管理策略2.1 分支策略2.2 bug分支2.3 删除临…

Spring Cloud Alibaba Nacos 2023.X 配置问题

文章目录 问题现象&#xff08;一&#xff09;解决方法&#xff08;一&#xff09;问题现象&#xff08;二&#xff09;解决方法&#xff08;二&#xff09;问题现象&#xff08;三&#xff09;解决方法&#xff08;三&#xff09; 问题现象&#xff08;一&#xff09; Spring…

厨卫行业供应链产销协同前中后大平台现状需求分析报告+P120(120页PPT)(文末有下载方式)

资料解读&#xff1a;厨卫行业供应链产销协同前中后大平台现状需求分析报告 详细资料请看本解读文章的最后内容。在当前厨卫行业竞争激烈的市场环境下&#xff0c;企业的发展战略和业务模式创新至关重要。本次解读的报告围绕某厨卫企业展开&#xff0c;深入探讨其供应链产销协同…

我在哪,要去哪

在直播间听到一首好听的歌《我在哪&#xff0c;要去哪》-汤倩。 遇见的事&#xff1a;21~24号抽调去招生。 感受到的情绪&#xff1a;公假吗&#xff1f;给工作量吗&#xff1f;月工作量不够扣钱吗&#xff1f;报销方便吗&#xff1f;有事情&#xff0c;从来不解决后顾&#x…

SpringBoot-2整合MyBatis以及基本的使用方法

目录 1.引入依赖 2.数据库表的创建 3.数据源的配置 4.编写pojo类 5.编写controller类 6.编写接口 7.编写接口的实现类 8.编写mapper 1.引入依赖 在pom.xml引入依赖 <!-- mysql--><dependency><groupId>com.mysql</groupId><artifac…