llvm windows编译成功

news2024/11/16 4:28:57

一、所需工具

  1. Visual Studio

    • 推荐版本:Visual Studio 2022。其他版本亦可支持。
  2. CMake

    • 下载地址
  3. Ninja

    • 下载地址
  4. LLVM

    • 版本参考:llvm-project-llvmorg-18.1.8
    • 下载地址

二、配置与编译步骤

  1. 以管理员身份打开命令行终端,输入以下命令来设置执行策略:

    Set-ExecutionPolicy Unrestricted
    

    按提示输入 Y 以确认。

  2. 进入项目目录并创建构建目录:

    cd D:\llvm-project-main\llvm-project-llvmorg-18.1.8\
    mkdir build
    cd build
    
  3. 使用CMake生成构建文件并开始编译:

    cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release \
    -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;clang-tools-extra;libunwind;compiler-rt" \
    -DLLVM_ENABLE_ASSERTIONS=ON  -DCMAKE_CXX_FLAGS="/utf-8" ..\llvm\
    

三、常见错误及解决方案

如果在执行上述命令时出现以下错误:

CMake Error at CMakeLists.txt:139 (MESSAGE):
libcxx isn’t a known project:
bolt;clang;clang-tools-extra;compiler-rt;cross-project-tests;libc;libclc;lld;lldb;mlir;openmp;polly;pstl;flang.
Did you mean to enable it as a runtime in LLVM_ENABLE_RUNTIMES?

此错误表明 libcxx 被CMake识别为未知项目,可能是由于LLVM版本的变化或CMake选项设置不当,需要设置DLLVM_ENABLE_RUNTIMES=“libcxx;libcxxabi;libunwind;compiler-rt”

解决方案:
  1. 使用正确的CMake选项:
    如果要构建LLVM项目,需使用 LLVM_ENABLE_RUNTIMES 选项来启用 libcxxlibcxxabi,而非 LLVM_ENABLE_PROJECTS。修改后的命令如下:

    cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release \
    -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;compiler-rt" \
    -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \
    -DLLVM_ENABLE_ASSERTIONS=ON  -DCMAKE_CXX_FLAGS="/utf-8" ..\llvm\
    
  2. 检查LLVM版本与CMake的兼容性:

    • 确保CMake版本与LLVM版本兼容。如果CMake版本过旧,可能会触发一些CMake policy(如CMP0114和CMP0116)的警告或错误。
    • 可以尝试升级到最新版本的CMake,并参考LLVM文档确保使用了正确的构建选项。
  3. 修复CMake policy警告:

    • CMake可能提示某些策略已经过时,未来版本将移除旧的行为。在 CMakeLists.txt 中手动设置这些策略为 NEW,或确保代码已经适配新行为。

    例如,可在 CMakeLists.txt 的开头加入:

    cmake_policy(SET CMP0114 NEW)
    cmake_policy(SET CMP0116 NEW)
    

在这里插入图片描述

通过上述调整,应该可以解决配置错误,顺利完成构建。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cea3b1058a0145c391763e9e9feca1e9.pn

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

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

相关文章

Linux多进程

进程的概述 进程是计算机科学中的一个基本概念,它指的是在操作系统中正在执行的程序的实例 在Linux操作系统中,进程是程序执行的实体,是资源分配的基本单位 在在Ubuntu中,通过使用ps命令可以查看当前的进程列表 ps aux 进程与…

WSL2安装与使用

使用WSL2的前提条件: 1.开启CPU的虚拟化 打开任务管理器 ->性能->查看CPU虚拟化 2.开启Windows功能 任务栏输入“功能”,勾选下面选项,然后按照提示重新启动电脑。 3.搜索栏输入cmd,右键以管理员身份运行,输入…

对商品评论进行文本分析(NLP)的实战项目

文本分析技术是指使用计算机程序或算法处理、分析和理解文本数据的一系列方法。这种技术在自然语言处理(NLP)领域中非常重要,它可以应用于多种场景,包括但不限于情感分析、主题识别、信息提取、文本分类等。以下是一些常见的文本分…

SpringBoot+Vue3整合minio,实现分布式文件存储

文章目录 几种常用的文件存储安装和使用minioSpringBoot整合minio 基本所有的软件项目都会需要文件存储功能,图片、视频存储。 几种常用的文件存储 经常用的几种方案,直接存在本地文件夹,开发一个简单的系统当然没有问题。随机系统所需的资源…

90.WEB渗透测试-信息收集-Google语法(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:89.WEB渗透测试-信息收集-Google语法(3) • inurl • 搜索特殊 UR…

Leetcode JAVA刷刷站(55)跳跃游戏

一、题目概述 二、思路方向 在Java中,为了解决这个问题,你可以采用贪心算法的思想。贪心算法在这里的应用主要体现在,每一步都尽可能跳得远,以此来判断是否能够到达数组的最后一个下标。 算法的思路是,遍历数组nums&am…

ICWS 2024 _ 基于生成长度预测的大语言模型推理请求调度

随着技术的快速迭代,大语言模型(Larage Langugage Model, LLM )在各种场景下都展示出强大的文本处理能力,越来越多的业务期待通过接入大模型服务,提升业务效果。区别于传统RPC请求服务时间相近,大模型请求服…

《计算机操作系统》(第4版)第2章 进程的描述与控制 复习笔记

第2章 进程的描述与控制 一、前趋图和程序执行 1. 前趋图 (1)定义 前趋图是指一个有向无循环图,可记为DAG, 它用于描述进程之间执行的先后顺序。 (2)图形表示 前趋图如图2-1所示。 图2-1 前趋图 2. 程序的执行 (1)程序顺序执行时的特征 ①顺序性。 ②封闭性。 ③ 可…

Robot Operating System——创建可执行文件项目的步骤

大纲 初始化环境创建Package代码添加依赖(package.xml)修改编译描述find_package寻找依赖库指定代码路径和编译类型(可执行文件/动态库)链接依赖的库完整文件 编译测试总结参考资料 之前我们看到ROS2中,有的Node的实现…

案例 | 生产制造中的直线度测量

关键词:直线度测量仪,直线度 生产中不仅需要评价产品的外观尺寸,还需要对直线度(弯曲度)等尺寸加以测量。作为一种评价产品直度的重要指标——直线度,能够对其进行检测是非常重要的。 关于直线度,对于一些弯…

初学者使用WordPress可能会遇到的问题以及如何解决

WordPress 作为一个普及度相当广的内容管理系统 (CMS),对于刚刚开始建立自己第一个网站的初学者来说是非常合适的选择。它不需要你懂编写代码,且对 SEO 友好,管理起来也很方便。然而,许多初学者在使用 WordPress 时会犯一些错误&a…

各厂家BI对比

帆软BI、奥威BI、永洪BI、思迈特BI、亿信华辰BI是国内知名的BI产品,不少企业在选型BI软件时都需要对这些BI软件进行了解,从中选择适合自己的一款。经过过年的发展,这些BI(商业智能)软件各自在多个行业中都有广泛的应用…

Anti-Bandit Neural Architecture Search for Model Defense

模型防御的Anti-Bandit网络架构搜索 论文链接:https://arxiv.org/abs/2008.00698(ECCV2020) 项目链接:https://github.com/bczhangbczhang/ABanditNAS 模型防御的Anti-Bandit网络架构搜索Abstract1 Introduction2 Related Work3 Anti-Bandit网络架构搜…

前端项目重新打包部署后如何通知用户更新

前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后如何通知用户更新常用的webSocket解决方案纯前端方案路由拦截多线程main.ts中 创建多线程多线程逻辑处理 前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后,由于用户没及时更新页面&…

Vue 自定义文字提示框

目录 前言代码演示相关代码文字提示框组件定义组件调用前言 今天开发遇上了一个新的问题,要求写一个带着滑动动画的文字提示框。但是我经常使用的Element-UI组件库只有淡入淡出效果,并且想要修改样式只能全局修改,非常不利于后期的开发。因此,我最终选择直接自定义一个符合…

VAuditDemo文件漏洞

目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip,然后更改shell.zip 为 shell.jpg上传 二、任意文件读取漏洞 avatar.php updateAvatar.php logCheck.php 任意文件读取漏洞利用 VAuditDemo文件…

Python中使用SQLite数据库的方法4-3

对于数据库的操作,主要包括“增”、“删”、“改”、“查”四种。在Python中使用SQLite数据库的方法4-1_python的sqlite怎么打开-CSDN博客和Python中使用SQLite数据库的方法4-2_python2 sqlite2-CSDN博客中实现增”、“删”和“查”三种操作。 1 带过滤条件的“查”…

C语言基础(七)

1、二维数组: C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引(或下标)来访问,索引通常是从0开始的。数组的大小在声明时确定,并且之后不能…

在Linux下搭建go环境

下载go go官网:All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上,也可以直接web下载: wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压: tar -x…

Leetcode JAVA刷刷站(57)插入区间

一、题目概述 二、思路方向 为了解决这个问题,我们可以遍历给定的区间列表 intervals,并同时构建一个新的列表来存储最终的合并结果。遍历过程中,我们检查当前区间是否与 newInterval 重叠或相邻,并根据需要进行合并。如果不重叠…