作为一个喜欢尝鲜的开发者,Fedora 激进的软件源更新速度总是让人又爱又恨。这不刚把系统升级到 Fedora 44,准备用手头的NVIDIA重新编译一份最新版的 llama.cpp 来跑大模型,结果在 CMake 配置阶段系统默认的 GCC 16 太前沿了,直接被 NVIDIA 的 nvcc 拒之门外。
在经过一番摸索(和不想折腾多版本 GCC 的挣扎)后,我成功用最轻量的方式搞定了这个“版本不兼容”的顽疾。现将这次踩坑与验证的全过程整理成文,希望能给同样在 Linux 新版本生态里折腾本地大模型的朋友们提供一点参考。
1. 编译llama.cpp 报错
在 Fedora 44 系统下编译 llama.cpp 并启用 CUDA 加速时,遇到一个由于 GCC 版本过高 导致的 CMake 配置失败问题。
当执行如下编译配置命令时:
cmake -B build \
-DGGML_CUDA=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CUDA_ARCHITECTURES=86 \
-DCMAKE_C_FLAGS="-march=native" \
-DCMAKE_CXX_FLAGS="-march=native"
CMake 会直接抛出如下错误:
/usr/local/cuda/include/crt/host_config.h:137:2: error: #error -- unsupported GNU version! gcc versions later than 15 are not supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check;
原因分析:
Fedora 的软件源更新一向激进,系统默认的 GCC 版本已经来到了 16.x。而当前的 CUDA Toolkit(即使是较新的 13.x 版本)内部的 nvcc 编译器出于稳定性考虑,硬性限制了最高只支持到 GCC 15。检测到工具链版本超前流,nvcc 主动触发了宏定义错误并终止了编译。
2. 解决方案 强行忽略版本检查
我不想在系统中折腾多版本 GCC 切换,可以直接在 CMake 中向 nvcc 传递 -allow-unsupported-compiler 标志来忽略版本检查
# 1. 清理缓存
rm -rf build
# 2. 重新配置 CMake 并传入显式标志
cmake -B build \
-DGGML_CUDA=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CUDA_ARCHITECTURES=86 \
-DCMAKE_C_FLAGS="-march=native" \
-DCMAKE_CXX_FLAGS="-march=native" \
-DCMAKE_CUDA_FLAGS="-allow-unsupported-compiler"
# 3. 开始多核并行编译
cmake --build build --config Release -j$(nproc)
3. 验证 CUDA 是否成功启用
编译完成后,可以通过 llama.cpp 自带的工具来验证 GPU 加速是否真正生效。检查基础版本与编译器信息
liqixin@fedora:~/dev/llama.cpp/$ ./build/bin/llama-cli --version
version:9352 (b4c0549a4)
built with GNU 16.1.1
发表回复