LLVM学习-- 构建和安装

embedded/2025/3/19 11:59:12/

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.ppmy.cn/embedded/173848.html

相关文章

matlab 火电厂给水控制系统仿真

1、内容简介 略 matlab157-火电厂给水控制系统仿真 可以交流、咨询、答疑 2、内容说明 略 摘 要 虽然现在新能源发电领域比较火爆,但至今火力发电厂依然在我的的发电领域中拥有很重要的地位。我国虽然还是发展中国家,但是近年来GDP的增长已经处于世界…

Android Fresco 框架兼容模块源码深度剖析(六)

Android Fresco 框架兼容模块源码深度剖析 一、引言 在 Android 开发的多元环境中,兼容性是衡量一个框架优劣的重要指标。Fresco 作为一款强大的图片加载框架,其兼容模块在确保框架能在不同 Android 版本、不同设备和不同图片格式下稳定运行方面发挥着…

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用 《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用内核对象内核对象的定义内核对象归操作系统所有 基于 Windows 的线程创建进程与线程的关系Windows 中线程的创建方…

第29周 面试题精讲(3)

Java面试题详解 一、请介绍 MyBatis 中二级缓存的一些情况 问题:MyBatis 中二级缓存的作用和使用方法是什么? 答案: 一级缓存:默认开启,数据存储在 SqlSession 的生命周期中,SqlSession 关闭后缓存释放…

hackmyvm-Smol

信息收集 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: Cannot open MAC/Vendo…

【一起来学kubernetes】16、CronJob使用详解

前言核心特性架构与组件1. CronJob YAML结构2. 关键字段说明 工作原理生命周期管理1. **创建与启动**2. **查看调度状态**3. **手动触发任务**4. **清理历史记录** 典型应用场景高级用法1. **动态参数注入**2. **任务依赖**3. **超时控制** 最佳实践对比其他资源常见问题k8s的C…

如何利用物理按键控制LVGL控件的大小与状态

​ lvgl可以利用物理按键控制控件的选择和状态,演示视频如下: 单物理按键控制LVGL控件的选择和状态 移植方法如下:1 在注册设备中,填写对应的变量和初始化函数。这里我们以移keypad为例,因为keypad的功能很多。 ![请添…

【NLP】 1. 文本在计算机里的表示: One-Hot, sparse vector, bag of words

文本的表示 一段文本,或者一个词,我们如何来表示它? 我们可以通过类似字典的方式来解释它,或者通过有关联的词句来解释。 但是我们如何将自然语言输入给计算机呢? 计算机读取的是比特,而不是文字。 那么关…