Linux——普通用户离线源码编译 gcc-9 方法和调用教程

一、前言

1. 场景痛点

  • 服务器无管理员sudo权限,无法apt/yum安装gcc-9

  • 服务器无外网,不能用conda在线安装gcc,只能纯离线编译

  • CUDA11.1 仅支持最高gcc10,系统默认gcc版本过高,编译DCNv2等cuda算子报错:unsupported GNU version! gcc versions later than 10 are not supported!

2. 环境信息

环境 版本
系统 Linux x86_64
CUDA 11.1
目标编译器 gcc-9.5.0(稳定版)
权限 普通用户,无root
网络 服务器内网离线,无外网

3. 最终效果

将gcc9安装至个人用户目录,不改动系统任何文件,多gcc版本共存;后续可直接用于CUDA11.1算子编译,彻底规避nvcc编译器版本不兼容问题。


二、前期准备(有网机器提前下载,上传服务器)

服务器无网络,需要提前在自己电脑下载完整源码+依赖,打包上传至服务器家目录 ~/

1. 下载gcc9.5.0源码

bash 复制代码
wget https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.gz

2. 自动下载gcc必备依赖(关键:gmp/mpfr/mpc/isl)

解压源码后,执行官方脚本自动拉取依赖,无需手动一个个下载

bash 复制代码
tar -zxvf gcc-9.5.0.tar.gz
cd gcc-9.5.0
# 自动下载并解压4个编译依赖,离线编译必备
./contrib/download_prerequisites

执行完毕后,目录下会出现4个依赖压缩包,不要删除、不要移动 ,直接把整个 gcc-9.5.0 文件夹上传到服务器。


三、服务器端离线编译(全程无sudo,复刻实操流程)

避坑前置:清空污染环境变量(解决90%编译报错)

conda、之前自定义库路径会给 LIBRARY_PATH 注入当前目录 .,gcc编译脚本严格禁止该符号,会直接报错终止编译。

⚠️ 只清空危险变量,不重置系统PATH,不破坏conda

bash 复制代码
# 仅清空gcc编译会检测的库路径,保留conda和系统PATH不变
unset LIBRARY_PATH
unset CPATH
unset C_INCLUDE_PATH
unset CPLUS_INCLUDE_PATH

1. 进入源码目录,清理旧编译缓存

bash 复制代码
cd ~
# 删除之前失败的编译目录,彻底重来
rm -rf gcc-9.5.0/build_gcc9
cd gcc-9.5.0
# 新建独立编译目录(源码和编译文件分离,最佳实践)
mkdir build_gcc9
cd build_gcc9

2. configure配置(无sudo专属参数,直接复制)

bash 复制代码
../configure \
--prefix=$HOME/software/gcc9 \
--enable-languages=c,c++ \
--disable-multilib

参数解释:

  • --prefix=$HOME/software/gcc9:安装到个人家目录,无需任何管理员权限

  • --enable-languages=c,c++:只编译C/C++,减少编译时间,无需多余语言

  • --disable-multilib:仅编译64位程序,适配服务器环境,避免32位兼容报错

3. 编译&安装(耗时较长,建议screen后台运行)

bash 复制代码
# 利用16个CPU核心编译。注意考虑自己设备的cpu核心数
make -j16
# 无sudo直接安装到个人目录,无需管理员权限
make install

编译时长参考:16核服务器约20~30分钟,耐心等待,看到如下日志即为安装成功:

make[1]: Leaving directory '/home/XXX/gcc-9.5.0/build_gcc9'

注意事项:不要中断,第一次运行就得编译完,否则就需要从头(第一步)来一遍。


四、加载本地gcc9,切换编译器版本

1. 临时生效(当前终端)

bash 复制代码
# 将本地gcc9路径放到环境变量最前面,优先调用
export PATH=$HOME/software/gcc9/bin:$PATH
# 动态库链接路径,解决后续编译找不到库文件问题
export LD_LIBRARY_PATH=$HOME/software/gcc9/lib64:$LD_LIBRARY_PATH

# 校验版本,输出gcc version 9.5.0 即为成功
gcc -v
g++ -v

2. 永久生效(新开终端无需重复输入)

bash 复制代码
echo 'export PATH=$HOME/software/gcc9/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$HOME/software/gcc9/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
相关推荐
做一个快乐的小傻瓜1 小时前
ZYNQ DEV套件引脚约束
java·linux·运维
yyuuuzz1 小时前
云服务器软件部署的常见问题与经验
linux·运维·服务器·网络·数据库·人工智能·github
青瓦梦滋1 小时前
Linux:UDP协议的socket套接字
linux·运维
狮子再回头2 小时前
relhat9.1 yum无法安装问题
linux·运维·centos
杨云龙UP2 小时前
Oracle 19c 单机环境安装目录规划与磁盘永久挂载操作指南_2026-06-15
运维·服务器·数据库·oracle·部署·目录·规划
暮云星影2 小时前
全志linux开发 USB接口设置
linux·arm开发·驱动开发
herinspace2 小时前
管家婆云辉煌开单优化
服务器·数据库·电脑·管家婆软件·财务软件
QWEDDRFTG2 小时前
杜绝工程事故,服务器电源线这样选
服务器
xingyuzhisuan2 小时前
8 卡 / 16 卡 GPU 服务器机架布线与高速互联带宽优化技术详解
运维·服务器·云计算·gpu算力