Fedora 31系统中如何安装gfortran 10版本
Fedora 31系统安装gfortran 10的可行方案
报错根因梳理
- 执行
sudo dnf install gcc-gfortran最终安装得到gfortran 9版本:Fedora 31官方软件源默认搭载的就是gcc 9.x全套工具链,同包名gcc-gfortran下没有提供10版本的构建产物,自然会安装源内默认的9.x版本 - 图形界面安装Fedora 33版rpm包提示不支持:图形化包管理器会自动校验系统版本、依赖匹配度,Fedora 33的安装包依赖的系统库版本比Fedora 31的现有版本更高,校验不通过就会直接拦截安装流程
- 终端执行rpm文件报
cannot execute binary file: Exec format error:rpm本质是软件归档格式,不是可执行二进制程序,直接给文件加执行权限运行,系统自然会识别为格式不匹配,这本身就是错误的rpm安装操作
可落地的安装方法
方法1:安装系统源内置的多版本拆分编译器包
- Fedora为满足多版本编译器共存的需求,会将不同大版本的gcc套件拆分为独立命名的包,不会和系统默认gcc版本产生文件冲突
- 先通过dnf搜索当前系统源内的gcc相关包,确认是否存在
gcc10-gfortran这类独立包 - 如果搜索到对应包,直接执行
sudo dnf install gcc10-gfortran即可完成安装,安装完成后可通过gfortran-10 --version校验版本,后续可根据项目需求灵活选择调用gfortran 9或者gfortran 10,不会互相干扰
方法2:匹配对应系统版本的rpm包手动安装
- 必须下载与Fedora 31版本完全匹配的gfortran 10安装包,也就是文件名带
fc31标识的包,禁止跨大版本选用Fedora 33及以上版本的软件包,避免出现ABI不兼容的问题 - 下载完成后不要直接执行包文件,通过dnf命令安装,让系统自动处理依赖匹配,对应执行命令:
sudo dnf install /你的下载路径/gcc-gfortran-10*.fc31.x86_64.rpm - 该方式会自动校验系统架构、依赖版本,缺失的依赖会自动从系统源拉取补全,不会出现此前的格式错误
方法3:源码编译兜底安装(无适配安装包时使用)
- 当系统源内找不到匹配的gfortran 10包时,可通过gcc 10源码编译的方式安装,全程不会影响系统原有编译器组件
- 先安装基础编译依赖:
sudo dnf install make gcc gcc-c++ zlib-devel - 解压gcc 10源码包后,执行配置命令,单独指定安装路径避免覆盖系统文件:
./configure --prefix=/opt/gcc10 --enable-languages=fortran - 配置完成后执行
make && sudo make install完成编译安装(耗时根据机器性能约20-40分钟) - 安装完成后将
/opt/gcc10/bin路径加入用户环境变量的优先搜索路径,即可正常调用gfortran 10;后续如果不需要这个版本,直接删除/opt/gcc10目录就能完全卸载,不会留下系统残留
注意事项
- 跨Fedora大版本安装第三方rpm包是高风险操作,不同版本的底层glibc、编译器库ABI存在差异,就算强行跳过依赖校验安装,也大概率会出现运行时崩溃、库文件缺失的问题
- 安装rpm包需通过包管理器命令执行,不要将rpm包作为可执行文件直接运行,这是不符合RPM包管理规范的操作
- Fedora 31已停止官方维护,若系统内搜索不到对应软件包,可先将软件源指向版本归档仓库后再重新检索安装
内容的提问来源于stack exchange,提问作者AlphaF20
相关产品推荐
相关产品推荐

