命令行gcc -v和g++ -v输出版本不一致
前言:本文初编辑于2024年9月27日
CSDN主页:https://blog.csdn.net/rvdgdsva
博客园主页:https://www.cnblogs.com/hassle
博客园本文链接:https://www.cnblogs.com/hassle/p/18435916
本人错误描述:conda环境里面有一个默认环境base和一个创建的环境your_env_name,base里面安装的是gcc7.5和g++7.5,创建环境里装的是gcc14和g++14。而虚拟环境里面命令gcc -v和g++ -v输出版本不一致
在虚拟环境里,运行下面的代码,显示gcc版本为14.0
(your_env_name) XiaoMing@LAPTOP:~$ gcc -v
//结果
gcc version 14.1.0 (conda-forge gcc 14.1.0-1)
运行下面的代码,显示g++版本为7.5
(your_env_name) XiaoMing@LAPTOP:~$ g++ -v
//结果
gcc version 7.5.0 (Ubuntu 7.5.0-6ubuntu2)
原因
去找找报错信息看到了这个
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/XiaoMing/miniconda3/envs/your_env_name/bin/
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
系统中同时存在两个不同的GCC编译器安装:一个是由Miniconda3环境your_env_name
提供的GCC 14.1.0版本,另一个是系统自带的GCC 7版本。 gcc -v
命令显示的是Miniconda3环境your_env_name
中配置的GCC编译器信息,而 g++ -v
命令显示的是系统默认的g++编译器信息。
gcc -v
输出中的 Target: x86_64-conda-linux-gnu
指明了Miniconda环境中的编译器目标架构,而 g++ -v
输出中的 Target: x86_64-linux-gnu
指明了系统默认编译器的目标架构。 这说明Miniconda环境中的GCC编译器与系统默认的g++编译器是不同的。
造成这种差异的原因可能是你的系统环境变量PATH
的设置导致shell优先搜索Miniconda环境中的gcc
,而g++
则仍然指向系统默认的编译器。 或者,系统可能同时安装了多个版本的GCC编译器,而gcc
和g++
的符号链接指向了不同的版本。
处理
打开终端,输入以下命令查看当前的PATH
环境变量:
echo $PATH
这将输出一个以冒号 (:
) 分隔的目录列表。 这些目录是shell搜索可执行文件的路径。
在输出的PATH
中,找到Miniconda环境yuan
的bin
目录路径 (例如 /home/XiaoMing/miniconda3/envs/your_env_name/bin
) 和系统默认GCC编译器的路径 (例如 /usr/bin
或 /usr/local/bin
)。
找到你的shell配置文件。 这通常是~/.bashrc
(bash shell), ~/.zshrc
(zsh shell), 或其他类似的文件。 使用文本编辑器打开该文件 (例如 nano ~/.bashrc
或 vim ~/.bashrc
),不过我更推荐使用nano ~/.bashrc
。 在文件中找到PATH
变量的定义行,并修改其顺序,将系统默认GCC路径放在Miniconda路径之前。 例如,如果你的PATH
定义如下:
export PATH="/home/youmu/miniconda3/envs/yuan/bin:$PATH"
修改为:
export PATH="/usr/bin:/home/youmu/miniconda3/envs/yuan/bin:$PATH" # 或其他包含系统GCC路径的路径
此步骤旨在调整PATH
环境变量的顺序,使系统在搜索gcc
命令时,优先查找系统默认路径下的gcc
,而不是Miniconda环境中的gcc
保存并关闭文件。 然后运行以下命令使更改生效:
source ~/.bashrc # 或 source ~/.zshrc 等
重新运行 gcc -v
和 g++ -v
命令,查看输出是否已更改。
不出意外的话,你的虚拟环境中的gcc将从指向了Miniconda环境中(your_env_name)的编译器变成指向了系统默认(base)的编译器