Linux系统普通用户无法使用gcc-9.3.0仅sudo可调用如何解决
两种调用方式的差异
核心原因是sudo执行环境和普通用户环境的PATH环境变量优先级不同:
- apt安装的gcc 9.3.0默认部署在
/usr/bin/gcc路径下,属于系统全局公共路径 - OpenFOAM安装时会在普通用户的shell配置文件(如
.bashrc、.zshrc或OpenFOAM专属环境激活脚本)中,将自带gcc 6.3.0的所在路径添加到PATH的最靠前位置,普通用户执行命令时会优先匹配排在前面的路径中的程序 - sudo执行命令时默认会重置环境变量,PATH会使用系统预设的安全路径,不会加载普通用户的自定义PATH配置,因此会优先找到
/usr/bin/gcc对应的9.3.0版本
普通用户使用gcc 9.3.0的配置方案
可以根据使用场景选择以下任意一种方案:
方法1:临时单次调用(无需改配置,仅单次生效)
apt安装的多版本gcc一般会自带带版本号后缀的可执行文件,直接执行gcc-9即可调用9.3.0版本,编译时替换gcc命令为gcc-9即可。
方法2:设置别名(仅当前用户生效,不影响其他程序运行)
如果不想修改全局路径配置,仅希望自己执行gcc命令时默认调用9.3.0版本,可以在当前使用的shell配置文件(bash对应~/.bashrc,zsh对应~/.zshrc)末尾添加一行:
alias gcc='gcc-9'
添加完成后执行source ~/.bashrc(zsh替换为对应配置文件路径)即可生效,需要使用OpenFOAM自带gcc时直接调用其绝对路径即可,不会互相干扰。
方法3:修改PATH优先级(永久生效,默认优先使用gcc 9.3.0)
首先确认gcc 9.3.0的实际路径:which gcc-9
输出一般为/usr/bin/gcc-9,在shell配置文件末尾添加一行:
export PATH=/usr/bin:$PATH
source配置文件生效后,所有命令都会优先匹配系统路径下的程序。
注意:该方案会将系统路径优先级提到最高,可能影响OpenFOAM的正常运行,需要使用OpenFOAM时需注释该行并重新source配置文件
方法4:通过update-alternatives配置多版本切换(推荐,全用户生效、灵活切换)
适合需要经常切换gcc版本的场景,首先执行以下命令添加gcc版本选项:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 # 下面命令中的路径替换为普通用户执行which gcc得到的OpenFOAM gcc的实际路径 sudo update-alternatives --install /usr/bin/gcc gcc /path/to/openfoam/gcc 60
末尾的90、60为优先级数值,数值越大默认优先级越高。需要切换版本时执行:sudo update-alternatives --config gcc
按照提示输入对应版本的序号即可完成切换。
内容的提问来源于stack exchange,提问作者nima
相关产品推荐
相关产品推荐

