命令列gcc -v和g++ -v輸出版本不一致
前言:本文初編輯於2024年1月30日
CSDN主頁:https://blog.csdn.net/rvdgdsva
部落格園主頁:https://www.cnblogs.com/hassle
本人錯誤描述: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)的編譯器