日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CentOS 7升级gcc 8.3.1 7.x.x 4.9.4版本

發(fā)布時(shí)間:2024/4/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS 7升级gcc 8.3.1 7.x.x 4.9.4版本 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Centos 7默認(rèn)gcc版本為4.8,有時(shí)需要更高版本的,這里以升級(jí)至8.3.1版本為例(升級(jí)gcc7系列也是類似的步驟),分別執(zhí)行下面三條命令即可,無(wú)需手動(dòng)下載源碼編譯

1、安裝centos-release-scl

sudo yum install centos-release-scl

2、安裝devtoolset,注意,如果想安裝7.*版本的,就改成devtoolset-7-gcc*,以此類推

sudo yum install devtoolset-8-gcc*

3、激活對(duì)應(yīng)的devtoolset,所以你可以一次安裝多個(gè)版本的devtoolset,需要的時(shí)候用下面這條命令切換到對(duì)應(yīng)的版本

scl enable devtoolset-8 bash

大功告成,查看一下gcc版本

gcc -v

顯示為?gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)

補(bǔ)充:這條激活命令只對(duì)本次會(huì)話有效,重啟會(huì)話后還是會(huì)變回原來(lái)的4.8.5版本,要想隨意切換可按如下操作。

首先,安裝的devtoolset是在 /opt/rh 目錄下的,如圖

?每個(gè)版本的目錄下面都有個(gè) enable 文件,如果需要啟用某個(gè)版本,只需要執(zhí)行

source ./enable

所以要想切換到某個(gè)版本,只需要執(zhí)行

source /opt/rh/devtoolset-8/enable

可以將對(duì)應(yīng)版本的切換命令寫個(gè)shell文件放在配了環(huán)境變量的目錄下,需要時(shí)隨時(shí)切換,或者開機(jī)自啟

4、直接替換舊的gcc

舊的gcc是運(yùn)行的 /usr/bin/gcc,所以將該目錄下的gcc/g++替換為剛安裝的新版本gcc軟連接,免得每次enable

mv /usr/bin/gcc /usr/bin/gcc-4.8.5? ? ?【備份舊的gcc】

ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc? ? 【替換為新的gcc軟鏈接】

mv /usr/bin/g++ /usr/bin/g++-4.8.5? ? 【備份舊的g++】

ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++? ?【替換為新的g++軟鏈接】

gcc --version

g++ --version

編譯安裝gcc4.9.1 - gcc5xxx

一、安裝開發(fā)必備環(huán)境:

yum groupinstall "Development Tools" yum install glibc-static libstdc++-static

二、編譯安裝gcc-4.9.4

你可以到官網(wǎng)下載gcc,也可以直接在這里下載:Index of /software/gcc/releases??下載好后進(jìn)行編譯安裝:

wget? http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.4/gcc-4.9.4.tar.gz

tar -zxvf gcc-4.9.4.tar.gz cd gcc-4.9.4 ./contrib/download_prerequisites mkdir build cd build ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib make(建議不要使用make -j來(lái)編譯,雖然可以縮短編譯時(shí)間,但極大可能會(huì)編譯失敗) make install

其中執(zhí)行?./contrib/download_prerequisits?將自動(dòng)下載以下幾個(gè)文件,這個(gè)幾個(gè)文件在gcc編譯時(shí)需要:

  • mpfr-2.4.2.tar.bz2
  • gmp-4.3.2.tar.bz2
  • mpc-0.8.1.tar.gz
  • isl-0.15.tar.bz2

由于網(wǎng)絡(luò)條件不是很好,在下載這幾個(gè)文件時(shí)很久都下載不下來(lái),所以我中斷了很多次,并刪除下載了的文件,重新執(zhí)行./contrib/download_prerequisits命令,下載完成后在configure時(shí)配置一些選項(xiàng),我沒(méi)有使用--prefix,在make install時(shí)將自動(dòng)安裝到/usr/local/bin下,編譯過(guò)程十分漫長(zhǎng),我的筆記本用了兩三個(gè)小時(shí),公司的電腦只用了一個(gè)小時(shí),編譯安裝在完成后需要重啟電腦:

init 6

重起后就可以通過(guò)gcc -v來(lái)查看gcc版本,現(xiàn)在已經(jīng)是4.9.4了。

三、測(cè)試【有坑,踩平】

所以我決定寫一個(gè)小程序來(lái)測(cè)試一下,編譯程序沒(méi)有問(wèn)題,但是運(yùn)行的時(shí)候出現(xiàn):

"./a.out: /lib64/libstdc++.so.6:version 'GLIBCXX_3.4.21' not found(required by ./a.out)",

所以接下來(lái)需要解決這個(gè)問(wèn)題。

四、解決運(yùn)行程序gcc出現(xiàn)'GLIBCXX_3.4.21' not found

這是因?yàn)樯?jí)gcc時(shí),生成的動(dòng)態(tài)庫(kù)沒(méi)有替換老版本gcc的動(dòng)態(tài)庫(kù)導(dǎo)致的,將gcc最新版本的動(dòng)態(tài)庫(kù)替換系統(tǒng)中老版本的動(dòng)態(tài)庫(kù)即可解決,運(yùn)行以下命令檢查動(dòng)態(tài)庫(kù):

strings /lib64/libstdc++.so.6 | grep GLIBC

以下是輸出結(jié)果:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

從輸出結(jié)果可以看到并沒(méi)有“GLIBCXX_3.4.21“,所以可以斷定我們的程序運(yùn)行時(shí)動(dòng)態(tài)加載的是老的動(dòng)態(tài)庫(kù),解決這個(gè)問(wèn)題需要將當(dāng)前鏈接文件的鏈接指向改成最新的動(dòng)態(tài)庫(kù)地址:

cp /usr/local/lib64/libstdc++.so.6.0.21 /lib64 cd /lib64 rm -rf libstdc++.so.6 ln -s libstdc++.so.6.0.21 libstdc++.so.6

然后你可以執(zhí)行以下命令來(lái)查看'GLIBCXX_3.4.21'已經(jīng)可以找到了:

strings /lib64/libstdc++.so.6 | grep GLIBC

解決了這個(gè)問(wèn)題終于可以執(zhí)行程序了.

然后又測(cè)試了-g選項(xiàng)來(lái)編譯程序,編譯好程序調(diào)試程序時(shí)并不能夠設(shè)置斷點(diǎn)以及print變量的值,gdb調(diào)試中出現(xiàn):Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.e17_2.6.x86_4 libgcc-4.8.5-4.e17.x86_64的問(wèn)題,通過(guò)上網(wǎng)查閱資料,是因?yàn)間cc版本和gdb版本并不匹配,或者說(shuō)gdb版本過(guò)低,我的gdb版本是7.6.1,是2013年的,現(xiàn)在最新的是7.11.1,所以我決定直接升級(jí)到最新版本。

四、編譯安裝gdb-7.11.1?

到官網(wǎng)http://ftp.gnu.org/gnu/gdb/直接下載最新的版本并進(jìn)行編譯安裝:

tar -xvf gdb-7.11.1.tar.gz cd gdb-7.11.1 ./configure make make install

整個(gè)編譯過(guò)程持續(xù)15分鐘左右,當(dāng)執(zhí)行make install時(shí)gdb安裝出現(xiàn)了錯(cuò)誤:WARNING: 'makeinfo' is missing on your sysem,則需安裝相關(guān)依賴程序:

yum install texinfo libncurses5-dev

依賴安裝完成后重新執(zhí)行make install就可以了,然后重新啟動(dòng)電腦:

init 6

重起后就可以通過(guò)gdb -v來(lái)查看gdb版本,現(xiàn)在已經(jīng)是7.11.1了,但是當(dāng)調(diào)試程序時(shí)出現(xiàn)下面信息時(shí):

warning: File "/usr/local/lib64/libstdc++.so.6.0.21-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". To enable execution of this file addadd-auto-load-safe-path /usr/local/lib64/libstdc++.so.6.0.21-gdb.py line to your configuration file "/root/.gdbinit". To completely disable this security protection addset auto-load safe-path / line to your configuration file "/root/.gdbinit".

將以下信息放入?~/.gdbinit?就可以了:

add-auto-load-safe-path /usr/local/lib64/libstdc++.so.6.0.21-gdb.py set auto-load safe-path /

若想通過(guò)gdb來(lái)調(diào)試STL容器,則還需要做一些配置,可以通過(guò)GDB Python pretty printers來(lái)解決這個(gè)問(wèn)題:

svn checkout svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python stlPrettyPrinter mv stlPrettyPrinter /usr/local

然后將下面的配置信息放入~/.gdbinit:

python import sys sys.path.insert(0, '/usr/local/stlPrettyPrinter') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end

更多有關(guān)GDB Python pretty printers的信息可以點(diǎn)擊這里。

五、Cmake指定gcc版本

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++

把這兩個(gè)變量配置在 ~/.bash_profile? 登錄自動(dòng)生效,這樣不用每次修改?。

六、懸而未決的問(wèn)題

gcc4.8.5 升級(jí)到gcc ?5.2 ?isl' Makefile:663: *** missing separator. ?Stop

總結(jié)

以上是生活随笔為你收集整理的CentOS 7升级gcc 8.3.1 7.x.x 4.9.4版本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。