在WSL2 Ubuntu22.04编译Julia1.9.2源码后make testall失败求助
修复WSL2 Ubuntu22.04下Julia 1.9.2编译后
make testall的Distributed模块测试失败问题 先给结论:你的安装没损坏
make成功且程序能正常运行,说明Julia核心功能没问题,只是分布式相关测试因为WSL2的NAT网络特性卡壳了,不用直接判定安装损坏。
针对性修复步骤
1. 排查WSL2本地回环与网络配置
WSL2默认用NAT网络,分布式测试依赖本地进程间TCP通信,可能存在回环访问异常:
- 先在WSL终端执行
ping 127.0.0.1,确认本地回环能正常连通; - 如果ping不通,编辑
/etc/wsl.conf添加以下内容:
然后在Windows命令行执行[network] generateHosts = false generateResolvConf = falsewsl --shutdown重启WSL,再手动配置hosts:echo "127.0.0.1 localhost" | sudo tee -a /etc/hosts
2. 单独测试Distributed模块缩小范围
别直接跑make testall,先单独测Distributed模块定位问题:
./julia -e 'using Pkg; Pkg.test("Distributed")'
如果还是报错,针对性排查TCPSocket错误:
- 检查端口占用:
sudo lsof -i :9000(分布式测试常用端口),有占用就杀掉对应进程; - 手动指定端口范围启动worker进程,验证基础TCP通信:
能正常输出Hello说明基础通信没问题,再回头分析测试的具体报错细节。./julia -e 'using Distributed; addprocs(2; port_range=(9001,9010)); @everywhere println("Hello"); rmprocs(workers())'
3. 重新编译时调整配置
如果上面的方法没用,清理编译产物后重新编译,指定适配WSL的选项:
make clean make USE_DISTRO=1 USE_SYSTEM_LLVM=0
USE_DISTRO=1让Julia调用系统依赖,减少编译时的网络配置冲突;USE_SYSTEM_LLVM=0用Julia自带的LLVM,避免系统版本不兼容引发的问题。
4. 临时跳过Distributed测试(非必要)
如果用不到分布式功能,或者只想验证其他模块正常,可以单独测试除Distributed外的所有模块:
./julia -e 'using Pkg; for pkg in keys(Pkg.dependencies()) if pkg != "Distributed" try Pkg.test(pkg) catch e println("Test failed for $pkg: $e") end end end'
额外注意点
- Windows防火墙可能拦截WSL内的TCP连接,检查防火墙是否允许WSL相关的网络请求;
- 把WSL的Ubuntu系统更新到最新状态:
sudo apt update && sudo apt upgrade -y,避免旧版本依赖拖后腿。
内容的提问来源于stack exchange,提问作者drC1Ron
相关产品推荐
相关产品推荐

