平臺 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版本
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目錄中了