首页 > 其他分享 >命令行gcc -v和g++ -v输出版本不一致

命令行gcc -v和g++ -v输出版本不一致

时间:2024-09-27 15:50:37浏览次数:8  
标签:bin GCC ++ gcc 编译器 命令行 PATH

命令行gcc -v和g++ -v输出版本不一致


前言:本文初编辑于2024年1月30日

CSDN主页:https://blog.csdn.net/rvdgdsva

博客园主页:https://www.cnblogs.com/hassle


赞美大萌神,神不允许报错,这世上就没有了bug

本人错误描述: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编译器,而gccg++的符号链接指向了不同的版本。

处理

打开终端,输入以下命令查看当前的PATH环境变量:

echo $PATH

这将输出一个以冒号 (:) 分隔的目录列表。 这些目录是shell搜索可执行文件的路径。

在输出的PATH中,找到Miniconda环境yuanbin目录路径 (例如 /home/XiaoMing/miniconda3/envs/your_env_name/bin) 和系统默认GCC编译器的路径 (例如 /usr/bin/usr/local/bin)。

找到你的shell配置文件。 这通常是~/.bashrc (bash shell), ~/.zshrc (zsh shell), 或其他类似的文件。 使用文本编辑器打开该文件 (例如 nano ~/.bashrcvim ~/.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 -vg++ -v 命令,查看输出是否已更改。

不出意外的话,你的虚拟环境中的gcc将从指向了Miniconda环境中(your_env_name)的编译器变成指向了系统默认(base)的编译器

标签:bin,GCC,++,gcc,编译器,命令行,PATH
From: https://www.cnblogs.com/hassle/p/18435916

相关文章

  • 软件工程结队项目:基于C++实现的自动生成小学四则运算的命令行程序
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标<运用C++实现四则运算法则的命令行程序>团队成员1李梓灏3122004695团队成员2吴......
  • 【C++进阶】AVL树的介绍及实现
    【C++进阶】AVL树的介绍及实现......
  • C++顺序结构(2)学习任务
    在坚果云中注册免费个人云盘一、视频下载存放在规划好的文件夹中,并观看学习1、变量存储.注释2、四则运算.输入3、认识设置DEV-C++4、第一个C++程序5、头文件6、命名空间7、cout语句8、什么是变量?9、表达式和赋值语句10、计数器11、自加自减运算符12、课后题目113、......
  • C++-练习-45
    题目:下面是一个结构声明:structbox{        charmaker[40];        floatheight;        floatwidth;        floatlength;        floatvolume;};编写一个函数,按值传递box结构,并显示每个成员的值。编写一个函数,传......
  • 【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
    文章目录从零实现C++Vector前言1.基本结构与初始化细分1.1空构造函数的实现与测试实现代码:测试用例:输出:1.2带大小和默认值的构造函数实现代码:测试用例:输出:1.3拷贝构造函数实现代码:测试用例:输出:1.4赋值操作符的实现实现代码:测试用例:输出:2.容量管理的实现与测......
  • C++ 标准模板库(STL)之集合(set)
    啊,哈喽,小伙伴们大家好。我是#张亿,今天呐,学的n钱买n鸡是集合(set)C++标准模板库(STL)之集合(set)(下面代码中的std::要去掉)在C++标准模板库(STL)中,set 是一种非常有用的容器,用于存储唯一元素的集合。set 内部自动对元素进行排序,通常使用红黑树(Red-BlackTree)实现,以保证元素以升......
  • C++ 文件I/O流
    C++文件的I/O流一、c++对文本文件的读写a.创建流对象,通过流对象打开文件ofstreamofs(constchar*filename,openmodemode);b.通过成员函数方式,打开文件voidopen(constchar*filename);voidopen(constchar*filename,openmodemode);filename:文件的路径mode:打开......
  • C++_读取配置文件以及内存方式
    开发范式输入和输出程序员的另一部分时间是用在获取需求输入上基本上普通开发者都是业务逻辑翻译员,传统开发的最重要的事情就是要理解客户的需求,把需求翻译成计算机系统的流程和逻辑AI开发是基于大模型的开在AI时代从翻译业务逻辑的程序员转变为能调教大模......
  • 广州C++信奥老师解1913:【00NOIP普及组】单词接龙
    ​ 【题目描述】 【输出】 样例连成的“龙”为atoucheatactactouchoose#include<bits/stdc++.h>usingnamespacestd;intv[21],ans=0,n;stringa[21];intgetPos(strings1,strings2)//beast和astonish例ast则返回位置2,但实际把后面onish接上去{for......
  • Open3D 点云分割之最小图割算法(C++)
    文章目录一、原理概述1.1基本原理1.2最小割算法二、实现代码三、实现代码参考资料一、原理概述1.1基本原理(1)首先用一个无向图G=<V,E>来表示要分割的点云,V和E分别是顶点和边的集合(构建无向图),其中每条边均有着相应的权重。不同于普通的图结构,GraphCuts图......