You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04 LTS安装NVIDIA CUDA时GCC版本适配及编译报错求助

Ubuntu 22.04 LTS安装NVIDIA CUDA时GCC版本适配及编译报错求助

嗨,我来帮你梳理下这个问题的解决思路,你遇到的困境其实挺常见的,咱们一步步来:


方案一:别手动编译GCC!用包管理器直接安装指定版本更省心

手动编译GCC很容易踩依赖坑,Ubuntu 22.04其实可以通过包管理器直接获取官方打包好的GCC 11.3,操作更简单:

  • 先清理之前手动编译GCC留下的残留文件,然后执行以下命令:
    # 更新系统源
    sudo apt update
    # 尝试直接安装指定版本的GCC 11.3(Ubuntu官方源通常包含这个版本)
    sudo apt install gcc-11=11.3.0-1ubuntu1~22.04 g++-11=11.3.0-1ubuntu1~22.04
    # 如果上面的版本号找不到,添加工具链PPA再安装
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt update
    sudo apt install gcc-11 g++-11
    # 切换默认GCC版本到11.3
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
    # 验证版本是否正确
    gcc --version
    g++ --version
    
  • 这样就能快速得到稳定的GCC 11.3,不用自己处理编译依赖的问题。

方案二:如果非要手动编译GCC,先解决C++11编译器依赖

你编译GCC 11.3时出现的报错,是因为卸载了原来的GCC 11.4后,系统里没有可用的、支持C++11的编译器——而编译GCC本身就需要一个正常工作的编译器。解决方法如下:

  • 先临时安装一个低版本的GCC(比如GCC 10)来做编译工具:
    sudo apt install gcc-10 g++-10
    # 临时切换默认编译器到GCC 10
    sudo update-alternatives --set gcc /usr/bin/gcc-10
    sudo update-alternatives --set g++ /usr/bin/g++-10
    # 重新运行GCC 11.3的configure,指定用GCC 10来编译
    ./configure --prefix=/usr/local/gcc-11.3 --enable-languages=c,c++ CC=gcc-10 CXX=g++-10
    # 编译安装(-j$(nproc)用满CPU核心加速)
    make -j$(nproc)
    sudo make install
    # 安装完成后切换回GCC 11.3作为默认
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-11.3/bin/gcc 100
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/local/gcc-11.3/bin/g++ 100
    

方案三:不用卸载GCC 11.4,直接适配CUDA兼容高版本GCC

CUDA官方标注的“支持版本”只是推荐版本,不是强制要求。对于GCC 11.4,你可以通过以下方法让CUDA兼容:

  • 如果是安装CUDA Toolkit时遇到版本检测报错,用runfile安装时添加--override参数跳过版本检查:
    # 假设你下载的CUDA安装包是cuda_xxx.run
    sudo ./cuda_xxx.run --override
    
  • 在编译CUDA项目时,给nvcc加上--gcc-toolchain参数指定GCC工具链路径,比如:
    nvcc your_code.cu --gcc-toolchain=/usr/bin/gcc-11 -o your_program
    
  • 安装完成后,确保CUDA的环境变量(比如PATHLD_LIBRARY_PATH)配置正确即可正常使用。

备注:内容来源于stack exchange,提问作者Nuri Ziya KIRTEPE

火山引擎 最新活动