如何在CentOS7中安装10.0及以上版本的llvm-toolset或clang
报错原因
- 直接执行
yum install llvm-toolset-10.0提示无可用包:CentOS 7默认官方源、EPEL源内置的LLVM最高版本仅为3.4/5.0,10.0及以上版本不在默认软件源收录范围内,因此无法直接检索安装。 - 预编译包执行报
bash: ./clang: cannot execute binary file:你选用的clang+llvm-13.0.0-powerpc64le-linux-rhel-7.9是PowerPC64LE架构的编译包,和Docker启动的CentOS 7默认使用的x86_64(amd64)系统架构不兼容,二进制指令集不匹配导致无法运行。
正确安装方法
以下三种方法均适用于CentOS 7环境,可根据需要的版本选择:
方法1:通过SCL官方软件源安装(最稳定,推荐装10/12版本使用)
SCL是CentOS官方维护的高版本软件集源,不会替换系统基础依赖,兼容性最好:
- 先安装SCL源发布包:
yum install -y centos-release-scl - 刷新yum缓存:
yum makecache - 安装对应版本的LLVM工具集,比如安装10.0版本执行:
yum install -y llvm-toolset-10.0
如果要装12版本,把包名替换为llvm-toolset-12.0即可。 - 启用工具集环境:SCL安装的软件不会默认覆盖系统自带命令,执行以下命令进入启用对应版本LLVM的shell会话:
scl enable llvm-toolset-10.0 bash
执行完成后跑clang --version就能看到对应版本信息。如果需要进入容器自动启用,把scl enable llvm-toolset-10.0 bash写到/root/.bashrc文件末尾即可。
方法2:使用架构匹配的预编译包安装(适合安装13及以上版本,速度最快)
- 先确认当前系统架构,执行
uname -m,如果输出为x86_64,就选择文件名带x86_64标识、适配RHEL7.9的LLVM预编译包,不要选powerpc64le、aarch64等其他架构的包。 - 将压缩包上传到容器后,解压到固定目录,比如/opt目录:
tar -xf clang+llvm-13.0.0-x86_64-linux-rhel-7.9.tar.xz -C /opt/ - 配置环境变量,把解压后的bin目录加入系统PATH:
echo 'export PATH=/opt/clang+llvm-13.0.0-x86_64-linux-rhel-7.9/bin:$PATH' >> /etc/profile && source /etc/profile - 执行
clang --version验证,能正常输出版本信息就说明安装成功。适配RHEL7的预编译包和CentOS7完全兼容,不会有缺失依赖的问题。
方法3:源码编译安装(适合自定义编译选项、安装特定版本)
该方法耗时较长,适合有定制需求的场景:
- 先安装编译依赖:
yum install -y gcc gcc-c++ make cmake python3 zlib-devel libffi-devel - 准备对应版本的LLVM源码、Clang源码,将Clang源码放到LLVM源码目录的
tools/clang路径下。 - 新建独立的build编译目录,进入后执行cmake配置,指定安装路径(比如
/usr/local/llvm10),配置完成后执行make -j$(nproc)开始编译,编译完成后执行make install。 - 将安装路径下的bin目录加入系统PATH环境变量,即可正常调用。
注意事项
- 不管使用哪种安装方式,安装完成后优先执行
clang --version、llvm-config --version确认版本符合预期 - 使用预编译包必须严格核对包的架构标识,和
uname -m输出的架构完全一致才能正常运行 - CentOS 7的SCL源最高提供LLVM 12版本,要安装13及以上版本优先选择架构匹配的预编译包,源码编译可支持任意版本。
内容的提问来源于stack exchange,提问作者Pampastu
相关产品推荐
相关产品推荐

