当前位置: 首页 > article >正文

CentOS 7 如何安装llvm-project-10.0.0?

CentOS 7 如何安装llvm-project-10.0.0?

需要先升级gcc至7.5版本,详见CentOS 7如何编译安装升级gcc版本?一文

# 备份之前的yum .repo文件至 /tmp/repo_bak 目录
mkdir -p /tmp/repo_bak &&  cd /etc/yum.repo.d && /bin/mv ./*.repo /tmp/repo_bak# 更换yum软件源为阿里云镜像源,执行脚本后一直全部回车即可
bash <(curl -sSL https://linuxmirrors.cn/main.sh)# 使用阿里云镜像源安装编译依赖
yum install -y gcc gcc-c++ make cmake3 git zlib-devel ncurses-devel# 声明新GCC相关的环境变量,注意此步必须执行,否则后续GCC编译无法调用7.5版本新的运行库
cat << 'EOF' >> ~/.bashrc
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/lib64:$LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include/c++/7.5.0
EOF
source ~/.bashrc# 验证系统是否可以加载到 libstdc++.so.6 与 GLIBCXX_3.4.21,若无法加载需升级gcc至7.5版本
ldd $(which g++)grep libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6
strings /usr/local/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.21cd /tmp
# 下载 LLVM 源码
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/llvm-project-10.0.0.tar.xz
tar -xf llvm-project-10.0.0.tar.xz# 注意:此处必须创建单独的构建目录,必须在非源码目录中构建(LLVM 禁止 in-source build)
mkdir -p /tmp/llvm-project-10.0.0/llvm-build
cd /tmp/llvm-project-10.0.0/llvm-build# 运行 cmake3,在 build 目录中,指向 llvm 源码目录
cmake3 -G "Unix Makefiles" \-DCMAKE_C_COMPILER=/usr/local/bin/gcc \-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/opt/llvm-10 \-DLLVM_ENABLE_PROJECTS="clang" \-DLLVM_TARGETS_TO_BUILD="X86" \-DLLVM_ENABLE_TERMINFO=OFF \../llvm# 编译并安装,预计需要3小时左右
make -j1 VERBOSE=1
sudo make install# 编译完成后验证 llvm-config
/opt/llvm-10/bin/llvm-config --version# 声明 LLVM-10 工具链 环境变量
cat << 'EOF' >> ~/.bashrc
export PATH=/opt/llvm-10/bin:$PATH
export LD_LIBRARY_PATH=/opt/llvm-10/lib:$LD_LIBRARY_PATH
EOF
source ~/.bashrc# 验证LLVM-10 工具链是否可以正常使用
clang --version
llvm-config --prefix

笔者安装踩坑过程:
1 执行cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/llvm-10 ../输出ERROR:

CMake Error: The source directory “/tmp/llvm-project-10.0.0” does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

解决方案:cmake3构建要明确指定包含CMake构建系统核心配置文件的目录位置

llvm-project-10.0.0/
├── llvm  ✅ <- 需要在cmake3构建命令结尾明确指定这个目录寻找CMake构建系统的核心配置文件
│   ├── CMakeLists.txt  
│   └── ...
├── clang/
├── lld/
└── ...

改为为如下命令

cd /tmp
# 下载 LLVM 源码
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/llvm-project-10.0.0.tar.xz
tar -xf llvm-project-10.0.0.tar.xz# 注意:此处必须创建单独的构建目录,必须在非源码目录中构建(LLVM 禁止 in-source build)
mkdir -p /tmp/llvm-project-10.0.0/llvm-build
cd /tmp/llvm-project-10.0.0/llvm-buildcmake3 -G "Unix Makefiles" \-DCMAKE_C_COMPILER=/usr/local/bin/gcc \-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/opt/llvm-10 \-DLLVM_ENABLE_PROJECTS="clang" \-DLLVM_TARGETS_TO_BUILD="X86" \-DLLVM_ENABLE_TERMINFO=OFF \../llvm #  ✅ <- 明确指定llvm目录,用于寻找CMake构建系统的核心配置文件

2 在/tmp/llvm-project-10.0.0/lllvm目录下cmake3 构建输出ERROR:

CMake Error at CMakeLists.txt:242 (message):
In-source builds are not allowed.

Please create a directory and run cmake from there, passing the path

to this source directory as the last argument.

This process created the file CMakeCache.txt’ and the directory
CMakeFiles’.

Please delete them.

– Configuring incomplete, errors occurred!
See also “/tmp/llvm-project-10.0.0/llvm/CMakeFiles/CMakeOutput.log”.

解决方案:LLVM 明确要求在单独的 build 目录中构建,禁止在源代码目录 llvm-project-10.0.0/llvm 中运行了 cmake3

3 执行make -j$(nproc)输出ERROR:

CMake Error at cmake/modules/CheckCompilerVersion.cmake:38 (message):
Host GCC version must be at least 5.1, your version is 4.8.5.
Call Stack (most recent call first):
cmake/modules/CheckCompilerVersion.cmake:48 (check_compiler_version)
cmake/config-ix.cmake:13 (include)
CMakeLists.txt:623 (include)

– Configuring incomplete, errors occurred!
See also “/tmp/llvm-project-10.0.0/build/CMakeFiles/CMakeOutput.log”.

解决方案:编译要求 GCC ≥ 5.1,但CentOS 7系统默认是 4.8.5,升级系统GCC版本至7.5,详见CentOS 7如何编译安装升级gcc版本?一文

4 执行make -j$(nproc)输出ERROR:
…/…/…/bin/llvm-tblgen: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20’ not found (required by …/…/…/bin/llvm-tblgen)
…/…/…/bin/llvm-tblgen: /lib64/libstdc++.so.6: version CXXABI_1.3.9’ not found (required by …/…/…/bin/llvm-tblgen)
…/…/…/bin/llvm-tblgen: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21’ not found (required by …/…/…/bin/llvm-tblgen)
make[2]: *** [include/llvm/IR/Attributes.inc] Error 1
make[2]: Leaving directory /home/tmp/llvm-project-10.0.0/llvm-build’
make[1]: *** [include/llvm/IR/CMakeFiles/intrinsics_gen.dir/all] Error 2
make[1]: Leaving directory /home/tmp/llvm-project-10.0.0/llvm-build’
make: *** [all] Error 2
解决方案:先声明环如下境变量,再将make -j$(nproc)并行编译改为make -j1 VERBOSE=1

# 声明新GCC相关的环境变量,注意此步必须执行,否则后续GCC编译无法调用7.5版本新的运行库
cat << 'EOF' >> ~/.bashrc
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/lib64:$LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include/c++/7.5.0
EOF
source ~/.bashrc

5 执行clang --version llvm-config --prefix输出ERROR:

clang: /lib64/libstdc++.so.6: version GLIBCXX_3.4.22 not found (required by clang) clang: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20 not found (required by clang)
clang: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21 not found (required by clang) clang: /lib64/libstdc++.so.6: version CXXABI_1.3.9 not found (required by clang)
llvm-config: /lib64/libstdc++.so.6: version CXXABI_1.3.9 not found (required by llvm-config) llvm-config: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21 not found (required by llvm-config)

解决方案:声明新GCC相关的环境变量使动态链接器可以加载到新GCC的 libstdc++库

# 声明新GCC相关的环境变量,注意此步必须执行,否则后续GCC编译无法调用7.5版本新的运行库
cat << 'EOF' >> ~/.bashrc
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/lib64:$LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include/c++/7.5.0
EOF
source ~/.bashrc

相关文章:

CentOS 7 如何安装llvm-project-10.0.0?

CentOS 7 如何安装llvm-project-10.0.0&#xff1f; 需要先升级gcc至7.5版本&#xff0c;详见CentOS 7如何编译安装升级gcc版本?一文 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc/yum.repo.d && /bin/mv ./*.repo …...

Cursor 1.0 的核心功能亮点及技术价值分析

Cursor 1.0 的核心功能亮点及技术价值分析 结合官方更新和开发者实测整理&#xff1a; &#x1f6e0;️ 一、BugBot&#xff1a;智能自动化代码审查 功能亮点&#xff1a;深度集成 GitHub&#xff0c;自动扫描 Pull Request&#xff08;PR&#xff09;中的潜在 Bug&#xff08;…...

软考 系统架构设计师系列知识点之杂项集萃(83)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;82&#xff09; 第150题 体系结构权衡分析方法&#xff08;Architecture Tradeoff Analysis Method&#xff0c;ATAM&#xff09;是一种常见的系统架构评估框架&#xff0c;该框架主要关注系统的…...

NLP学习路线图(二十六):自注意力机制

一、为何需要你&#xff1f;序列建模的困境 在你出现之前&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种LSTM、GRU是处理序列数据&#xff08;如文本、语音、时间序列&#xff09;的主流工具。它们按顺序逐个处理输入元素&#xff0c;将历史信息压缩在一个隐藏…...

Unity3D仿星露谷物语开发60之定制角色其他部位

1、目标 上一篇中定制了角色的衬衫、手臂。 本篇中将定制角色其他部位的图形&#xff0c;包括&#xff1a;裤子、发型、皮肤、帽子等。 2、定制裤子 &#xff08;1&#xff09;修改ApplyCharacterCustomisation.cs脚本 我们需要设置一个输入框选择裤子的颜色。 // Select …...

C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)

目录&#xff1a; 一、前言及背景1.1需求描述1.2常见编程语言对比1.3应用背景 二、C对外接口2.1C对外封装2.2基于目标平台封装接口形式 三、系列文章汇总 一、前言及背景 1.1需求描述 不同的编程语言&#xff0c;具有不同的编程生态环境&#xff0c;对于项目应用来说&#xff…...

Google机器学习实践指南(机器学习模型泛化能力)

&#x1f525; Google机器学习(14)-机器学习模型泛化能力解析 Google机器学习(14)-机器学习模型泛化原理与优化&#xff08;约10分钟&#xff09; 一、泛化问题引入 ▲ 模型表现对比&#xff1a; 假设森林中树木健康状况预测模型&#xff1a; 图1&#xff1a;初始模型表现 …...

MySQL性能调优:Mysql8高频面试题汇总

1&#xff0c;主键和唯一键有什么区别&#xff1f; 主键不能重复&#xff0c;不能为空&#xff0c;唯一键不能重复&#xff0c;可以为空。 建立主键的目的是让外键来引用。 一个表最多只有一个主键&#xff0c;但可以有很多唯一键 2&#xff0c;MySQL常用的存储引擎有哪些&…...

Neo4j 数据建模:原理、技术与实践指南

Neo4j 作为领先的图数据库,其核心优势在于利用图结构直观地表达和高效地查询复杂关系。其数据建模理念与传统关系型数据库截然不同,专注于实体(节点)及其连接(关系)。以下基于官方文档,系统阐述其建模原理、关键技术、实用技巧及最佳实践: 一、 核心原理:以关系为中心…...

【数据结构知识分享】顺序表详解

一、存储结构 物理相邻性&#xff1a; 若元素 a 和 b 逻辑相邻&#xff0c;则它们在内存中的地址也连续&#xff08;如 &a[i1] &a[i] sizeof(ElemType)&#xff09;。 内存布局x&#xff1a; 基地址 索引 元素大小&#xff0c;通过首地址直接计算任意位置地址。 …...

vue+elementUI+springboot实现文件合并前端展示文件类型

项目场景&#xff1a; element的table上传文件并渲染出文件名称点击所属行可以查看文件,并且可以导出合并文件,此文章是记录合并文档前端展示的帖子 解决方案&#xff1a; 后端定义三个工具类 分别是pdf,doc和word的excle的目前我没整 word的工具类 package com.sc.modules…...

高效绘制业务流程图!专业模板免费下载

在复杂的业务流程管理中&#xff0c;可视化工具已成为提升效能的核心基础设施。为助力开发者、项目经理及业务架构师高效落地流程标准化&#xff0c;本文将为你精选5套开箱即用的专业流程图模板。这些模板覆盖跨部门协作、电商订单、客户服务等高频场景&#xff0c;具备以下核心…...

Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)

文章目录 Spring Boot Prometheus 实现应用监控&#xff08;基于 Actuator 和 Micrometer&#xff09;环境准备示例结构启动和验证验证 Spring Boot 应用Prometheus 抓取配置&#xff08;静态方式&#xff09;Grafana 面板配置总结 Spring Boot Prometheus 实现应用监控&…...

PowerBI企业运营分析—列互换式中国式报表分析

PowerBI企业运营分析—列互换式中国式报表分析 欢迎来到Powerbi小课堂&#xff0c;在竞争激烈的市场环境中&#xff0c;企业运营分析平台成为提升竞争力的核心工具。 该平台通过高效整合多源数据&#xff0c;并实时监控关键指标&#xff0c;能够迅速揭示业务表现的全貌&#…...

BugKu Web渗透之需要管理员

启动场景&#xff0c;打开网页&#xff0c;显示如下&#xff1a; 一般没有上面头绪的时候&#xff0c;就是两步&#xff1a;右键查看源代码 和 扫描网站目录。 步骤一&#xff1a; 右键查看源代码 和 扫描网站目录。 右键查看源代码没有发现异常。 于是扫描网站目录&…...

Java集合初始化:Lists.newArrayList vs new ArrayList()

文章目录 前言一、核心区别全景图二、代码实现深度对比1. 初始化方式对比2. 容量预分配机制 三、性能与底层原理1. 内存分配策略2. 基准测试数据&#xff08;JMH&#xff09; 四、Guava的进阶功能生态1. 集合转换2. 集合分片3. 不可变集合创建 五、最佳实践指南六、源码级实现解…...

VBA清空数据

列数转字母 Function CNtoW(ByVal num As Long) As String CNtoW Replace(Cells(1, num).Address(False, False), "1", "") End Function 字母转列数 Function CWtoN(ByVal AB As String) As Long CWtoN Range("a1:" & AB & &…...

【信息系统项目管理师-选择真题】2025上半年(第二批)综合知识答案和详解(回忆版)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

Java Lambda 表达式的缺点和替代方案

Java 8 引入的 Lambda 表达式曾被誉为编写简洁、函数式代码的革命性工具。但说实话,它们并不是万能钥匙。它有不少问题,比如它没有宣传的那么易读,在某些场景下还带来性能开销。 作为一名多年与 Java 冗长语法搏斗的开发者,我找到了更注重清晰、可维护性和性能的替代方案。…...

TDengine 开发指南—— UDF函数

UDF 简介 在某些应用场景中&#xff0c;应用逻辑需要的查询功能无法直接使用内置函数来实现&#xff0c;TDengine 允许编写用户自定义函数&#xff08;UDF&#xff09;&#xff0c;以便解决特殊应用场景中的使用需求。UDF 在集群中注册成功后&#xff0c;可以像系统内置函数一…...

使用vsftpd搭建FTP服务器(TLS/SSL显式加密)

安装vsftpd服务 使用vsftpd RPM安装包安装即可&#xff0c;如果可以访问YUM镜像源&#xff0c;通过dnf或者yum工具更加方便。 yum -y install vsftpd 启动vsftpd、查看服务状态 systemctl enable vsftpd systemctl start vsftpd systemctl status vsftpd 备份配置文件并进…...

1.1Nodejs和浏览器中的二进制处理

Buffer 在 Node.js 中&#xff0c;Buffer 类用于处理二进制数据。由于 JavaScript 在浏览器环境中主要用于处理字符串和数字等类型的数据&#xff0c;对二进制数据的处理能力较弱&#xff0c;因此 Node.js 引入了 Buffer 类来弥补这一不足&#xff0c;特别是在处理文件系统操作…...

入门AJAX——XMLHttpRequest(Post)

一、前言 在上篇文章中&#xff0c;我们已经介绍了 HMLHttpRequest 的GET 请求的基本用法&#xff0c;并基于我提供的接口练习了两个简单的例子。如果你还没有看过第一篇文章&#xff0c;强烈建议你在学习完上篇文章后再学习本篇文章&#xff1a; &#x1f517;入门AJAX——XM…...

Qt(part1)Qpushbutton,信号与槽,对象树,自定义信号与槽,lamda表达式。

1、创建Qt程序 2、命名规范及快捷键 3、Qpushbutton按钮创建 4、对象树概念 5、信号与槽 6、自定义信号与槽 7、当自定义信号和槽发生重载时 8、信号可以连接信号&#xff0c;信号也可以断开。 9、lamda表达式...

西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?

一、运营商机房监控痛点凸显 在通信行业快速发展的当下&#xff0c;西北某省级联通公司肩负着保障区域通信畅通的重任。然而&#xff0c;公司分布广泛的机房面临着诸多监控难题&#xff0c;尤其是偏远机房环境风险无法实时感知这一痛点&#xff0c;严重影响了机房的稳定运行和通…...

【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法

✨ 从普通 ItemsControl 到支持筛选的 ItemsControl&#xff1a;深入掌握 CollectionViewSource 用法 在日常 WPF 开发中&#xff0c;我们经常需要对数据进行筛选、排序、分组等操作&#xff0c;而原生的 ItemsControl 并不直接支持这些功能。本文将介绍如何通过 CollectionVi…...

Zookeeper 和 Kafka 版本与 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …...

3步布局关键词让流量更精准

其实流量不精准&#xff0c;90% 是关键词没布局好&#xff01; 掌握这 3 个超实用技巧&#xff0c;让你的内容精准推给目标人群&#xff01; 第一步&#xff1a;深挖高潜力关键词 别再一股脑用 “好看”“好用” 这些泛词啦&#xff01;打开平台搜索框&#xff0c;输入核心词…...

视觉分析在人员行为属性检测中的应用

基于视觉分析的人员行为属性检测方案 一、背景与需求分析 在工业生产、建筑施工、公共安全等领域&#xff0c;人员行为属性的合规性检测是保障安全生产的关键环节。例如&#xff0c;工地工人未佩戴安全帽、厨房人员未佩戴手套、作业现场人员使用手机等行为&#xff0c;均可能…...

学习 React【Plan - June - Week 1】

一、使用 JSX 书写标签语言 JSX 是一种 JavaScript 的语法扩展&#xff0c;React 使用它来描述用户界面。 什么是 JSX&#xff1f; JSX 是 JavaScript 的一种语法扩展。看起来像 HTML&#xff0c;但它实际上是在 JavaScript 代码中写 XML/HTML。浏览器并不能直接运行 JSX&…...