Fedora 44 编译 llama.cpp 提示 GCC 16 与 CUDA 不兼容的解决方法

作为一个喜欢尝鲜的开发者,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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注