ubuntu 20.04 中源码编译 llvm-clang 15.0.7
1. 准备工作
1.1 源码下载
本文介绍安装 llvm 和 clang,主要目的是基于 llvm 和 clang 进行二次开发,因此我们只安装 llvm 和 clang。需要下载下面的三个包(下载的地址:Release LLVM 15.0.7 · llvm/llvm-project · GitHub):
说明:llvm 15.0.7 和 之前版本在安装的时候的一个很大的区别,就在于必须同时下载 cmake,否在在编译时会报各种错误,这里就不给大家展示具体报错了,可以参考下面链接(LLVM 15.0.0-rc1: CMake Error at cmake/modules/CMakeLists.txt · Issue #56971 · llvm/llvm-project · GitHub)了解。
1.2 源码解压
主要操作如下:
- 解压前面一步下载到的三个文件
- llvm-15.0.7.src 重命名为 llvm(图好看,这一步可以不做)
- clang-15.0.7.src 重命名为 clang,放到 llvm 源码的 tools 目录下
- cmake-15.0.7.src 的 Modules 目录下面的文件,都拷贝到 llvm 源码的 cmake/modules 下面
tar -xf clang-15.0.7.src.tar.xz
tar -xf cmake-15.0.7.src.tar.xz
tar -xf llvm-15.0.7.src.tar.xz
mv llvm-15.0.7.src llvm
mv clang-15.0.7.src clang
mv clang llvm/tools/
cp cmake-15.0.7.src/Modules/* llvm/cmake/modules/
1.3 依赖库安装
llvm 在安装时,需要依赖如下的部分组件(均可以直接通过 apt install,基于 ubuntu 20.04,安装的版本都可以直接符合要求):
- gcc和g++(直接安装的是 9.4.0版本)
- cmake(3.16.3)
- make(4.2.1)
- python3(3.8.10)
2. 安装 llvm 15.0.7
2.1 基本执行命令
如下面的脚本所示:
cd llvm
mkdir build
cd build
cmake ../ -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_INCLUDE_BENCHMARKS=OFF
make -j8 && make install
说明:
在上面,相对于之前构建 llvm 10 等版本,新增了一个参数 LLVM_INCLUDE_BENCHMARKS 设置为 OFF,其实我也不是很清楚这个参数的含义,只是不设置这个参数,会报下面的错误:
CMake Error at CMakeLists.txt:1294 (add_subdirectory):
add_subdirectory given source
"/mnt/d/wsl/test/llvm/install/llvm/../third-party/benchmark" which is not
an existing directory.
3. 安装完成确认
maijun@LAPTOP-EEQ9H1QS:/mnt/d/wsl/tools/llvm-15.0.7.obj/bin$ ./clang -v
clang version 15.0.7
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /mnt/d/wsl/tools/llvm-15.0.7.obj/bin/.
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
maijun@LAPTOP-EEQ9H1QS:/mnt/d/wsl/tools/llvm-15.0.7.obj/bin$ ./llvm-config --version
4. 安装问题解决
4.1 collect2: fatal error: ld terminated with signal 9
这个报错是在编译 Debug 版本的时候遇到的,在编译 Release 或者 MinSizeRel 时并没有遇到。报错的原因:swap空间不够,需要创建更多的 swap 空间。
查看可用的swapon空间:
sudo swapon --show
创建更多的 swap 空间的方法:
# 创建 swapfile 文件夹
sudo mkdir /swapfile
cd /swapfile
# 在 swapfile 文件夹下,创建一个大小为20000000的空文件
sudo dd if=/dev/zero of=swap bs=1024 count=20000000
# 将生成的文件转换成swap类型的文件
sudo mkswap -f swap
# 激活 swap 文件
sudo swapon swap
如果使用完,要卸载的话,使用 swapoff:
sudo swapoff swap
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix