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

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.xdnf.cn/news/12276.html

相关文章:

  • Matlab实现任意伪彩色图像可视化显示
  • 机器学习KNN算法全解析:从原理到实战
  • rk3588 区分两个相同的usb相机
  • 数据库管理与高可用-MySQL主从复制与读写分离
  • Redux 实践与中间件应用
  • 分布式Session处理的五大主流方案解析
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(八):异步处理逻辑详解
  • Copilot for Xcode (iOS的 AI辅助编程)
  • ubuntu 22 安装milvus
  • 【QT面试题】(二)
  • RocketMQ入门5.3.2版本(基于java、SpringBoot操作)
  • 构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源
  • Unity基于GraphView的可视化关卡编辑器开发指南
  • Playwright 测试框架 - .NET
  • 智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
  • Oracle 用户名大小写控制
  • 若依添加添加监听容器配置(删除键,键过期)
  • 关于事务的简介
  • Ubuntu系统下交叉编译cJSON
  • IDEA运行Tomcat出现乱码问题解决汇总
  • 三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较
  • c++ chrono头文件含义
  • Ubuntu系统配置C++的boost库(含filesystem模块)的方法
  • 前缀和题目:逐步求和得到正数的最小值
  • Vue事件总线
  • MyBatis 查询功能实现全流程
  • 《操盘实战》速读笔记
  • 使用Hutool工具进行rsa加密解密示例:
  • Linux进程替换以及exec六大函数运用
  • 【电赛培训课】测量与信号类赛题分析