简介
Julia 通过 BinaryBuilder.jl 和 AzurePipeline 来自动的为社区编译大量的、跨平台的各种二进制文件。
出于开发、调试的目的我们可能需要在本地(半自动)编译 jll 包,以确保在线编译的产物符合预期。
有时候在线编译的产物和不使用 BinaryBuilder.jl 编译的产物行为不同时,也需要这样本地编译来找出原因。
以下介绍 Windows+WSL2 (Ubuntu) 的工作流程,类 Unix 平台的流程不会有显著的差异。
环境准备
- 必须是WSL2 无需手动配置环境
WSL 无法挂载 loop 设备 - Julia 1.6.x 或更高版本
- git:用于拉取 Yggdrasil 注册树
编译流程
浓缩版
git clone https://github.com/JuliaPackaging/Yggdrasil.git
# 进入 Julia 中
julia
] add BinaryBuilder.jl
exit()
# 回到 bash
# 找到你要编译的包、选定版本
cd Yggdrasil/O/OpenBLAS/OpenBLAS@0.3.10
# 此处的参数是你需要包的版本代号,空参数代表编译所有可能组合
julia --color=yes build_tarballs.jl --verbose x86_64-w64-mingw32-libgfortran5
详细流程
以 OpenBLAS 为例
- 拉取 Yggdrasil 注册树
git clone https://github.com/JuliaPackaging/Yggdrasil.git
- 在 Julia 中安装
BinaryBuilder.jl
打开 Julia
] add BinaryBuilder.jl
- 构建包
cd Yggdrasil/O/OpenBLAS/OpenBLAS@0.3.10 julia --color=yes build_tarballs.jl --verbose x86_64-w64-mingw32-libgfortran5
- 构建产物在:
products
文件夹下
备注:
- 构建过程会下载编译环境,需要保持网络畅通
WSL2 的代理设置较为繁琐,可参考:WSL2 中访问宿主机 Windows 的代理
设置完代理不通参考:WSL2 网络异常排查 - 构建过程可能会需要 root 权限,需要输入密码;
如果输入密码仍然报错,则使用 root 运行 julia,从第二步重新开始