CentOS系统编译任意版本GCC均失败,报错寻求解决方案
问题根因与解决方案
1. 编译中断核心原因:Pthreads依赖缺失
你遇到的第一个报错Pthreads are required to build libgomp是编译中断的核心诱因。libgomp是GCC实现OpenMP协议的官方运行库,编译强依赖系统的pthread开发组件。你当前环境缺少pthread对应的头文件和基础库,直接终止了libgomp的配置流程,连带整个GCC编译链路中断。
解决方法:
先安装对应系统的pthread及GCC编译基础依赖:
- CentOS/RHEL系列系统执行:
yum install -y glibc-devel glibc-static gmp-devel mpfr-devel libmpc-devel gcc gcc-c++ make - Debian/Ubuntu系列系统执行:
apt install -y libc6-dev libpthread-stubs0-dev libgmp-dev libmpfr-dev libmpc-dev gcc g++ make
2. install阶段报错根因:编译缓存未清理
你看到的无生成install目标的规则报错,是因为首次编译在libgomp阶段中断后,你没有清理旧的编译缓存就直接执行了make install。此时后续的fixincludes模块根本没有完成编译生成对应的安装规则,直接执行安装操作自然会报错。
完整编译流程
清空当前gcc源码目录的所有编译缓存,或者重新解压一份干净的GCC 7.3.0源码包,再按以下步骤操作:
- 执行configure配置,建议额外添加
--disable-libsanitizer参数规避低版本系统兼容问题:./configure --prefix=/home/vagrant/modules/gcc-7.3.0 --enable-languages=c,c++,fortran --disable-multilib --disable-libsanitizer - 执行编译与安装,可根据服务器核心数调整-j后的并行编译数加快速度:
make -j4 make install
原始运行报错说明
你最开始遇到的!$OMP& PRIVATE(...) internal compiler error是旧版本GCC的已知OpenMP编译bug,安装完新版本GCC后重新编译你的模型代码即可解决。
内容的提问来源于stack exchange,提问作者HyeonggyuSong
相关产品推荐
相关产品推荐

