centOS 7安裝gcc、g++

来源:https://www.cnblogs.com/cppbugboy/archive/2023/04/21/17338383.html
-Advertisement-
Play Games

平臺 windows 需 求 由於我近期有一個比賽,而我的主機又是x86架構的,人家要求使用arm架構的主機,我這窮屌絲,不可 能去買一臺吧,而且隨著國產系統的推進,採用arm架構的主機也越來越多,作為運維我們該怎麼利用x86 來運行arm架構的主機成為了一個問題 需 要的軟體和程式 以下軟體版本皆 ...


centOS7安裝gcc g++

在使用yum時遇到這個錯誤
Another app is currently holding the yum lock; waiting for it to exit…

運行命令

rm -f /var/run/yum.pid	//	強制關掉yum進程

一、第一種方式

1、先卸載以前的舊版本

因為centOS預設自帶4點幾版本的gcc 、g++編譯器,是比較老的版本的,所以先把老版本卸載掉。

1、 先獲取root許可權

2、 查看當前的安裝版本號

rpm -q gcc

3、卸載掉舊版本

rpm -e [第二步查到的版本號]

4、第三步可能會遇到如下錯誤,卸載失敗

error: Failed dependencies:
    gcc = 4.4.7-23.el6 is needed by (installed) gcc-c++-4.4.7-23.el6.x86_64
    gcc = 4.4.4 is needed by (installed) libtool-2.2.6-15.5.el6.x86_64

提示要卸載的版本有兩個依賴,要先卸載掉這兩個依賴(註意:下麵要卸載的版本號要和上面提示的兩個依賴的版本號一致)

rpm -e gcc-c++-4.4.7-23.el6.x86_64
rpm -e libtool-2.2.6-15.5.el6.x86_64

將這兩個依賴卸載完成之後再次執行第3步就可卸載成功

5、驗證卸載

[root@123 /]# gcc -v
-bash: /usr/bin/gcc: No such file or directory
[root@123 /]# g++ -v
-bash: /usr/bin/g++: No such file or directory

這樣即為卸載成功

2、安裝最新版本的gcc 、g++

在安裝之前,可以先去查詢一下目前gcc 、g++的版本以及區別,本文用了第11版

1、在系統中安裝存儲庫

yum install centos-release-scl

2、安裝gcc和g++包(註意版本號:11版)

yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++

3、配置安裝好的包(註意版本號:11版)

scl enable devtoolset-11 bash

4、驗證安裝

[root@123 /]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-11/root/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-11/root/usr --mandir=/opt/rh/devtoolset-11/root/usr/share/man --infodir=/opt/rh/devtoolset-11/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-11.2.1-20210728/obj-x86_64-redhat-linux/isl-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.1 20210728 (Red Hat 11.2.1-1) (GCC)
[root@123 /]# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-11/root/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-11/root/usr --mandir=/opt/rh/devtoolset-11/root/usr/share/man --infodir=/opt/rh/devtoolset-11/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-11.2.1-20210728/obj-x86_64-redhat-linux/isl-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.1 20210728 (Red Hat 11.2.1-1) (GCC) 

5、配置環境變數

因為不配置環境變數的話,每打開一個客戶端,就需要執行一次上面的第三步配置安裝包

//先查看gcc和g++安裝位置
[root@123 /]# which gcc
/opt/rh/devtoolset-11/root/usr/bin/gcc
[root@123 /]# which g++
/opt/rh/devtoolset-11/root/usr/bin/g++

編輯文件

vim /etc/profile

在文件後面添加下麵兩行內容:

PATH=$PATH::/opt/rh/devtoolset-11/root/usr/bin
export PATH

重新載入文件

source /etc/profile

二、第二種方式:使用老版本編譯新版本

1、查看系統中有沒有老版本

centOS自帶的是4點幾的版本 : gcc -v 、g++ -v 兩個命令查看,我的是4.8.5版本,如果有,跳到3、官網下載想要安裝的gcc版本

2、先用yum安裝老版本gcc、g++

sudo yum install -y gcc				//安裝gcc
sudo yum install -y gcc-c++			//安裝g++

3、官網下載想要安裝的gcc版本

http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/

4、安裝gcc需要的其他庫

mpfr、mpc、gmp三個庫 編譯之前還需準備以下:

1、安裝m4庫

sudo yum install -y m4 //首先安裝m4,否則configure gmp庫時會報錯**

2、安裝以下三個庫


**一定要按照這三個順序安裝**
1、gmp庫  		
下載地址:https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
	tar -Jxvf gmp-6.2.1.tar.xz	//解壓
	cd gmp-6.2.1				//進入
	./configure --prefix=/usr  	//指定編譯完後要安裝的路徑,可以自定,示例用/usr
	make -j4					//編譯
	sudo make install			//安裝

2、mpfr庫   	
下載地址:https://www.mpfr.org/mpfr-current/mpfr-4.2.0.tar.gz
	tar -zxvf mpfr-4.2.0.tar.gz	//解壓
	cd mpfr-4.2.0				//進入
	./configure --prefix=/usr  	//指定編譯完後要安裝的路徑,可以自定,示例用/usr
	make -j4					//編譯
	sudo make install			//安裝
	
3、mpc庫   	
下載地址:https://mirrors.aliyun.com/gnu/mpc/mpc-1.3.1.tar.gz?spm=a2c6h.25603864.0.0.60dd1a8cVMdT9B	
	tar -zxvf mpc-1.3.1.tar.gz	//解壓
	cd 	mpc-1.3.1				//進入
	./configure --prefix=/usr  	//指定編譯完後要安裝的路徑,可以自定,示例用/usr
	make -j4					//編譯
	sudo make install			//安裝


5、編譯安裝gcc、g++

編譯gcc時需要cc1,系統中會有,但是編譯時會報錯找不到

先到根目錄下找:

cd /
sudo find -name cc1

我的cc1在 /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1

創建軟連接到/usr/bin目錄下

sudo ln -s /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1 /usr/bin/cc1

編譯過程中可能會遇到這個錯誤,找不到libmpfr.so.6 這個庫,但是系統中會有,所以要先創建一個軟連接

在這裡插入圖片描述

去根目錄查找

cd /
sudo find -name libmpfr.so.6 

我的這個文件在/usr/lib目錄下

在編譯前先創建一個軟連接到/usr/lib64目錄下

sudo ln -s /usr/lib/libmpfr.so.6 /usr/lib64/libmpfr.so.6	//這個軟連接一定要創建在/usr/lib64目錄下

編譯安裝gcc、g++

tar -zxvf gcc-12.2.0.tar.gz 	//解壓
cd gcc-12.2.0/					//進入
sudo ./configure --disable-multilib --prefix=/usr		
								//生成makefile,--prefix指定編譯完之後的安裝路徑
								// /usr表示安裝之後的gcc、g++在/usr/bin裡面
								//如果路徑中有CMakeLists.txt,則也可以使用cmake生成makefile
								//cmake . -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr
								//--enable-multilib 允許32位編譯,如果系統中有32位的環境,一般不需要
								//--disable-multilib 只使用64位編譯
sudo make -j4					//編譯

在執行sudo make -j4時,我這裡出現了一個報錯

在這裡插入圖片描述

這是由於在編譯時記憶體不足造成的,
1、如果是虛擬機,可以擴大虛擬機的記憶體
2、創建swap分區(推薦)
建議看這篇文章https://blog.csdn.net/weixin_44796670/article/details/121234446
之後再執行sudo make -j4
編譯安裝完之後根據鏈接文章刪除swap分區即可

3、或者將sudo make -j4改為sudo make,減少同時進行的任務數量,但是編譯時間會更長

等待編譯完成,時間比較長!!!

6、刪除創建的軟連接,卸載yum安裝的gcc、g++

//刪除創建的軟連接
sudo rm -rf /usr/bin/cc1
sudo rm -rf /usr/lib64/libmpfr.so.6

//卸載yum安裝的gcc、g++
sudo yum remove gcc gcc-c++
sudo make install				//gcc和g++安裝到/usr/bin目錄中了

持續更新...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 函數式編程 面向對象過分強調“必須通過對象的形式來做事情”,而函數式思想則儘量忽略面向對象的複雜語法——強調做什麼,而不是怎麼做。 有時只是為了做某事情而不得不創建一個對象,而傳遞一段代碼才是我們真正的目的。 Lambda Lambda是一個匿名函數,可以理解為一段可以傳遞的代碼。 當需要啟動一個線 ...
  • 大數據時代,各行各業對數據採集的需求日益增多,網路爬蟲的運用也更為廣泛,越來越多的人開始學習網路爬蟲這項技術,K哥爬蟲此前已經推出不少爬蟲進階、逆向相關文章,為實現從易到難全方位覆蓋,特設【0基礎學爬蟲】專欄,幫助小白快速入門爬蟲,本期為自動化工具 Selenium 的使用。 概述 目前,很多網站都 ...
  • 匿名函數 閉包 匿名函數 ​ 顧名思義,就是沒有名字的函數。。。 func(){ fmt.Println("我就是匿名函數") } 匿名函數的兩種執行方法 將匿名函數賦給一個變數 定義後立即執行匿名函數 // 講匿名函數賦給一個變數 tmp := func(){ fmt.Println("我是匿名函 ...
  • CodeBuilder是一款強大的代碼生成工具,目前發佈了 3.0 preview 2,大家可以前去下載體驗 官方主頁。 ###1、多種數據源 基於 ADO.NET 的數據驅動 基於 Fireasy 3,支持從 SqlServer、MySql、Oracle、Firebird、PostgreSql、S ...
  • 記錄Docker的-v指令使用 前言 之前我淺學了一下docker,方便部署.net項目(部署的是打包之後的項目) dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 5031 EX ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章 ...
  • C#中的IDGen是一個C#實現的Twitter Snowflake演算法的ID生成器,可以生成全局唯一的ID,支持高併發場景下的ID生成。在本篇文章中,我們將介紹IDGen的使用方法並提供相關的C#示例代碼。 IDGen的介紹 IDGen是一款開源的分散式唯一ID生成器,支持多種ID生成演算法,並且可 ...
  • 用過ASP.NET Core MVC中IActionFilter攔截器的開發人員,都知道這是一個非常強大的MVC攔截器。最近才發現IActionFilter的OnActionExecuting方法,甚至可以獲取Controller的Action方法參數值。 假如我們在ASP.NET Core MVC ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...