LinuxBrew安装gcc未获最新版本且编译报错如何解决
核心问题原因拆解
为什么Linuxbrew安装的GCC停在5.5版本,没有装到最新的10.2
- Linuxbrew和Homebrew的版本管理逻辑是稳定优先,不会第一时间跟进GCC官方的最新发版。你当初执行
brew install gcc的时候,本地brew源里的gcc包锁定的版本就是5.5.0带第7版修订补丁的版本,后续你没有手动更新本地brew源、升级已安装包的话,版本不会自动跳升到更高版本。 - Linuxbrew对gcc这类核心编译工具的版本审核周期比GCC官方发版周期长很多,要等补丁适配、依赖校验通过后才会把新版本推送到源里,不是安装后就自动同步所有最新主线版本。
为什么执行apt安装gcc-9、build-essential后,系统gcc版本没变化
- 核心是PATH路径优先级的问题:你执行
which gcc能查到Linuxbrew路径下的可执行文件,说明Linuxbrew的bin目录被配置到了PATH变量的靠前位置,系统通过apt安装的/usr/bin/gcc-9所在路径优先级更低,系统调用命令时会优先匹配靠前路径的可执行文件,所以就算装了系统版的GCC9,也不会被默认调用。 - 另外你提到
which gcc返回的是g的路径,说明你本地的命令软链接配置有问题,正常情况下gcc和g是两个独立的可执行文件软链接,不会出现指向错位的情况。
为什么运行安装脚本报g++退出码1的错误
- 你通过Linuxbrew安装的5.5版本GCC本身对新版Ubuntu的兼容性很差,运行时经常会出现动态库不匹配的问题,比如老旧的GCC5依赖的libisl、libstdc等库版本和系统当前安装的版本不兼容,导致g一启动就直接崩溃退出。
- 安装脚本默认调用的就是这个有问题的brew版本g++,自然会抛出退出码1的报错。
可直接执行的解决步骤
- 先更新本地brew源索引,把现有brew安装的gcc升级到当前源内的适配版本:依次执行
brew update、brew upgrade gcc,升级完成后再执行g++ --version就能看到版本已经更新到当前源支持的较新版本。 - 调整PATH环境变量的优先级:编辑对应的shell配置文件(比如
~/.bashrc、~/.zshrc),把配置中把Linuxbrew bin目录前置的行调整到系统默认路径之后;如果想默认用apt安装的GCC9,可以直接在配置文件里加别名:alias gcc='gcc-9'、alias g++='g++-9',修改完执行source 对应配置文件让配置生效。 - 运行安装脚本前,手动指定要使用的编译器路径,避免脚本误调用有问题的brew版本g++:在执行脚本前先执行
export CC=/usr/bin/gcc-9、export CXX=/usr/bin/g++-9,再跑安装脚本,脚本就会调用你指定的系统版GCC9,不会匹配错误路径下的g++。 - 如果确实需要10.2版本的GCC,不用等brew源推送,直接下载GCC对应源码编译安装,把编译完成后的bin目录加到PATH最前面即可。
内容的提问来源于stack exchange,提问作者CAF
相关产品推荐
相关产品推荐

