news 2026/4/20 20:54:44

WSL 下 llama.cpp CUDA 编译血泪史:从 Wsl/Service/E_UNEXPECTED 到成功

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WSL 下 llama.cpp CUDA 编译血泪史:从 Wsl/Service/E_UNEXPECTED 到成功

【摘要】
最近在 WSL 2 环境下编译llama.cpp并启用 CUDA 加速时,遇到了一系列连环报错:从 WSL 服务崩溃 (Wsl/Service/E_UNEXPECTED),到 GCC 与 CUDA 版本不兼容导致的_Float64类型未定义错误。本文完整记录了从环境修复、版本统一、编译器降级到最终成功编译的全过程。如果你也正被这些问题困扰,希望这篇实战记录能帮你节省大量时间。


一、问题背景

我的环境配置:

  • 硬件:NVIDIA GeForce RTX 2080 Ti
  • Windows 驱动:536.23(支持 CUDA 12.2)
  • WSL 发行版:Ubuntu 24.04
  • 目标:编译 llama.cpp 并启用 CUDA 后端

一开始一切顺利,直到执行cmake .. -DGGML_CUDA=ON后,噩梦开始了。

二、踩坑全记录

坑 1:WSL 服务崩溃

$ wsl 灾难性故障 错误代码: Wsl/Service/E_UNEXPECTED

原因分析:WSL 后台服务卡死或组件损坏。

解决方案

# 以管理员身份在 PowerShell 中执行wsl--shutdown wsl--update# 修复 WSL 组件

如果问题依旧,可以尝试修复注册表权限或运行DISM /Online /Cleanup-Image /RestoreHealth

坑 2:CUDA 版本不一致

$ nvidia-smi# 显示 CUDA Version: 12.2$ nvcc--version# 显示 release 12.9

原因分析:驱动支持的最高 CUDA 版本是 12.2,但nvcc是 12.9,版本不匹配会导致编译出的二进制可能无法执行。

解决方案:降级 CUDA 工具包到 12.2,或升级 Windows 驱动。我选择了降级:

# 卸载旧版本sudoaptremove--purgenvidia-cuda-toolkit# 安装 CUDA 12.2(从 NVIDIA 官网下载)wgethttps://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.runsudoshcuda_12.2.0_535.54.03_linux.run--toolkit

坑 3:GCC 版本不兼容

# error: #error -- unsupported GNU version! gcc versions later than 12 are not supported!

原因分析:我的 GCC 是 13.3,而 CUDA 12.2 官方只支持到 GCC 12。

解决方案:降级到 GCC 10(最稳妥):

sudoaptinstallgcc-10 g++-10 gcc--version


坑 4:nvcc 仍调用系统默认 GCC

即使设置了CC=/usr/bin/gcc-10nvcc仍然调用的是gcc命令(指向 GCC 13)。

解决方案:创建软链接强制使用 GCC 10:

sudoln-sf/usr/bin/gcc-10 /usr/bin/gccsudoln-sf/usr/bin/g++-10 /usr/bin/g++

坑 5:_Float64类型未定义

编译过程中出现大量类似错误:

error:‘_Float64’ doesnotname a type;did you mean ‘_Float16’?error:‘_Float128’ wasnotdeclared inthisscope

原因分析:这是 GCC 13 + CUDA 12.9 + glibc 2.40 头文件冲突的连锁反应。降级到 GCC 10 后该问题自动消失。

三、最终成功配置

# 检查环境$ gcc--versiongcc(Ubuntu10.5.0-4ubuntu2.1)10.5.0 $ nvcc--versionCuda compilation tools, release12.2, V12.2.91 $ nvidia-smi|grepCUDA CUDA Version:12.2

四、重新编译

cd/mnt/d/git_projects/llama.cpp/buildrm-rf* cmake..-DGGML_CUDA=ONmake-j4

最终输出:

[100%] Built target llama-server [100%] Built target llama-cli


✅ 编译成功!

五、经验总结

问题解决方案
WSL 服务崩溃wsl --shutdown+wsl --update
CUDA 版本不匹配统一到驱动支持的版本(12.2)
GCC 版本过高降级到 CUDA 官方支持的版本(GCC 10)
nvcc 编译器路径错误创建/usr/bin/gcc软链接指向正确版本

六、避坑建议

  1. 版本统一是王道nvcc --versionnvidia-smi显示的 CUDA 版本必须一致或前者≤后者。
  2. 不要追新 GCC:CUDA 对宿主编译器版本要求苛刻,GCC 10 是万金油选择。
  3. 软链接优于环境变量nvcc硬编码调用gcc,修改PATHCC不一定有效。
  4. 遇到_Float64错误:99% 是 GCC 版本问题,降级即可。

写在最后

编译一个开源项目,踩坑是常态,但每一次排错都是成长。希望这篇记录能帮你少走弯路。如果你有更好的解决方案,欢迎评论区交流!

祝大家编码顺利,永不报错!🚀


本文标签:#WSL#CUDA#llama.cpp


本文为原创内容,版权归作者所有,转载需注明出处。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 20:53:27

知识竞赛在党建教育中的创新应用

🚩 知识竞赛在党建教育中的创新应用从单向灌输到双向互动 激活红色引擎📌 引言:党建教育的新挑战与新机遇随着时代发展,传统的党建教育模式面临着党员群体年轻化、信息获取渠道多元化、学习注意力碎片化等新挑战。如何创新教育形…

作者头像 李华
网站建设 2026/4/20 20:53:15

南宁宠物医院哪家好

在南宁这座充满活力的城市里,宠物已经成为许多家庭不可或缺的一员。当毛孩子出现健康问题时,选择一家值得信赖的宠物医院成为宠物主人的首要任务。今天,让我们一同走进广西阿荣宠物医院,了解这家陪伴宠物和主人走过13年时光的医疗…

作者头像 李华
网站建设 2026/4/20 20:53:14

2026免费AI降重软件怎么选?亲测好用不踩坑

对于赶论文的高校学生、需要产出学术成果的科研工作者来说,重复率超标、AI生成痕迹过审失败,绝对是定稿阶段最让人头疼的两大难题。纯人工修改动辄耗上三四个小时,结果要么重复率只降了两三个百分点,要么AI痕迹丝毫没减&#xff0…

作者头像 李华
网站建设 2026/4/20 20:52:35

旧电脑救星?实测在8GB内存老机器上安装UOS V20与Win10的性能对比

老旧电脑焕新指南:UOS V20与Win10在8GB内存设备上的实战对决 当你的笔记本电脑开机时间从30秒逐渐延长到两分钟,当打开浏览器标签超过五个就开始卡顿,当每次系统更新后都感觉机器又慢了一拍——这些信号都在提醒:是时候给老伙计寻…

作者头像 李华
网站建设 2026/4/20 20:52:32

IEC 101规约调试避坑指南:遥控失败?从地址映射与DCO限定词查起

IEC 101规约遥控失败排查实战:从地址映射到DCO限定词的深度解析 凌晨三点的变电站调试现场,主站工程师第17次点击"合闸"按钮,但监控屏上的断路器状态依然纹丝不动。这种场景对电力自动化从业者来说再熟悉不过——IEC 60870-5-101规…

作者头像 李华