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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...