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

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
http://www.lqws.cn/news/195121.html

相关文章:

  • solidity中sar和>>的区别
  • 新版双紫擒龙、紫紫红黄、动能二号源码指标源码公式讲解
  • Linux 初始化与服务管理全解析:rc.d、systemctl与service对比
  • 《ERP原理与应用教程》第3版习题和答案
  • 高等数学》(同济大学·第7版)第二章第一节“导数的概念“
  • 软件测试:质量保障的基石与未来趋势
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第一篇(排名不分先后)】
  • leetcode_206 反转链表
  • 【设计模式-5】设计模式的总结
  • 【办公类-104-01】20250606通义万相50分一天用完,通义万相2.1专业版测试
  • Guava LoadingCache 使用指南
  • Beckhoff(倍福)PLC 顺控程序转换条件解读
  • C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
  • 【Linux】Linux基础指令3
  • 三模冗余设计
  • 软件测试python学习
  • DDD架构实战 充血模型 电商订单
  • 筛选企业订单和业绩显著增长的标的
  • 低内聚高耦合的衡量指标
  • AI书签管理工具开发全记录(十三):TUI基本框架搭建
  • Python训练day40
  • robot_lab——rsl_rl的train.py整体逻辑
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 智谱清言沉思智能体,天工智能体,agenticSeek等AI Agent测试记录
  • 5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
  • 独家首发!低照度环境下YOLOv8的增强方案——从理论到TensorRT部署
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南
  • 嵌入(Embedding)技术的实现原理与应用场景解析
  • 阿里开源千问3向量模型 超越Google与OpenAI