当前位置: 首页 > 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
http://www.lryc.cn/news/2403152.html

相关文章:

  • Cursor 1.0 的核心功能亮点及技术价值分析
  • 软考 系统架构设计师系列知识点之杂项集萃(83)
  • NLP学习路线图(二十六):自注意力机制
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)
  • Google机器学习实践指南(机器学习模型泛化能力)
  • MySQL性能调优:Mysql8高频面试题汇总
  • Neo4j 数据建模:原理、技术与实践指南
  • 【数据结构知识分享】顺序表详解
  • vue+elementUI+springboot实现文件合并前端展示文件类型
  • 高效绘制业务流程图!专业模板免费下载
  • Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
  • PowerBI企业运营分析—列互换式中国式报表分析
  • BugKu Web渗透之需要管理员
  • Java集合初始化:Lists.newArrayList vs new ArrayList()
  • VBA清空数据
  • 【信息系统项目管理师-选择真题】2025上半年(第二批)综合知识答案和详解(回忆版)
  • Java Lambda 表达式的缺点和替代方案
  • TDengine 开发指南—— UDF函数
  • 使用vsftpd搭建FTP服务器(TLS/SSL显式加密)
  • 1.1Nodejs和浏览器中的二进制处理
  • 入门AJAX——XMLHttpRequest(Post)
  • Qt(part1)Qpushbutton,信号与槽,对象树,自定义信号与槽,lamda表达式。
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
  • Zookeeper 和 Kafka 版本与 JDK 要求
  • 3步布局关键词让流量更精准
  • 视觉分析在人员行为属性检测中的应用
  • 学习 React【Plan - June - Week 1】
  • 电子行业AI赋能软件开发经典案例——某金融软件公司