标签: GCC

  • 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