1. 程式人生 > >LINUX下升級Gcc

LINUX下升級Gcc

在學習或者編寫C/C++程式的時候,可能由於編譯器的版本較低,導致一些新增的知識點在加入到程式編譯時,會出現一些問題,例如編譯完成之後生成可執行檔案,但你在執行可執行檔案的時候,系統會報這樣的錯誤:

  1. [[email protected] ~]# ./a.out     
  2. ./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./a.out)<span style="font-size:14px;"><span style="font-family:'Times New Roman';">  
  3. </span><span style="font-family:'Times New Roman';"></span></span>  

這個原因是你升級了gcc的版本之後卻沒有用生成的動態庫替換老版本的動態庫, 這樣在程式編譯執行的時候偶爾就會遇到上面所述的問題,這個問題我們放到後面再進行解訣,下面就開始介紹gcc/g++編譯器的升級過程: 

首先升級gcc和g++是沒有便捷方式的,例如像yum update ....  yum install  這些命令都是沒用的,或者新增yum的repo檔案也是不行的,所以我們只能手動編譯安裝了,下面就開始我們的安裝過程。

1、獲取安裝包並解壓

  1. wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
  2. tar -jxvf gcc-6.1.0.tar.bz2  
當然,http://ftp.gnu.org/gnu/gcc 裡面有所有的gcc版本可供下載,最新的版本已經更新到7.1.0,但是我們並不需要最新版本,下面就用6.1.0版本來操作,其他的版本都可類似操作。

2、下載供編譯需求的依賴項

這個神奇的指令碼檔案會幫我們下載、配置、安裝依賴庫,可以節約我們大量的時間和精力。

  1. cd gcc-6.1.0  
  2. ./contrib/download_prerequisites  

執行這個指令碼要在聯網狀態下完成,因為要下載配置,安裝依賴庫,這也需要時間,網路不好的時候會是一個較慢長的等待時間。

3、建立一個目錄供編譯出的檔案存放

  1. mkdir gcc-build-6.1.0  
  2. cd gcc-build-6.1.0  
4、生成Makefile檔案
  1. ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib  
5、編譯
  1. make -j4  
-j4選項是make對多核處理器的優化,如果不成功請使用make
(注意:此步驟非常耗時,我虛擬機器耗時近3小時; 實體機近80分鐘,CPU基本是滿的,記憶體也使用不少)

6、安裝

  1. make install  
(安裝需要root許可權)

檢視安裝

ls /usr/local/bin | grep gcc

7、重啟然後檢視gcc版本

gcc -v

8、這之後你就可以寫個C++11的程式段進行測試

程式碼在此處省略。。。。。。

g++ -std=c++0x -o demoCpp11 demoCpp11.cpp

通過上面的步驟就可以完成對g++和gcc的升級

下面我們來解決開頭提到的問題:

原始碼編譯升級安裝了gcc後,編譯程式或執行其它程式時,有時會出現類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found的問題。這是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫導致的,將gcc最新版本的動態庫替換系統中老版本的動態庫即可解決。

(1). 執行以下命令檢查動態庫:

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

從輸出可以看出,gcc的動態庫還是舊版本的。說明出現這些問題,是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫。

(2). 執行以下命令,查詢編譯gcc時生成的最新動態庫:

find / -name "libstdc++.so*"

將上面的最新動態庫libstdc++.so.6.0.22複製到/usr/lib64目錄下

cd /usr/lib64

cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22  ./

(3). 刪除原來軟連線:

rm -rf libstdc++.so.6

(4). 將預設庫的軟連線指向最新動態庫:

ln -s libstdc++.so.6.0.22 libstdc++.so.6

(5). 預設動態庫升級完成。重新執行以下命令檢查動態庫:

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

可以看到 輸出有"GLIBCXX_3.4.14" 了


注意:網上的有一些教程在解決這個問題的時候會有這種方法,就是在網上找一個 libstdc++.so.6.0.22,然後使用這個來生成軟連線,這樣是不行的,一定要用自己編譯的動態庫,否則當你重啟電腦的時候,你的Centos桌面系統就會出問題,圖形化介面都無法操作,就是因為你使用了一個來路不明的動態庫導致的,解決辦法就是使用自己編譯的動態庫或者系統自帶的動態庫來生成軟連線,這樣重啟之後系統就會恢復了。

相關推薦

linux升級gcc的方法

由於工作主要平臺換到了linux上,而linux因為源上沒有比較新的gcc,只有4.7,而我們用到了C++11, 只好自己升級了,升級方法也比較簡單,就是耗時間。1.下載gcc最新的原始碼包 wget http://gcc.skazkaforyou.com/releases/gcc-4.9.1/gcc-4.9

Linux升級gcc/g++版本

更新Ubuntu的gcc和g++版本 首先安裝gcc和g++版本,依次進行如下操作: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-g

LINUX升級Gcc

在學習或者編寫C/C++程式的時候,可能由於編譯器的版本較低,導致一些新增的知識點在加入到程式編譯時,會出現一些問題,例如編譯完成之後生成可執行檔案,但你在執行可執行檔案的時候,系統會報這樣的錯誤:[[email protected] ~]# ./a.out    

linux使用gcc編譯運行C程序

images 鏈接 cnblogs bin collect 運行 ffffff alt 兩種 gcc(GNU Compiler Collection)是Linux下最常用的C語言編譯器,是GNU項目中符合ANSI C標準的編譯系統,能夠編譯用C、C++和Object C等語

Mac環境升級gcc版本--rocksdb

pil 控制 set comm 方法 支持 port pos 重新 前言 在mac環境下編譯rocksdb,需要配置依賴的編譯環境,其中有一項比較麻煩:c++編譯要支持C++11,但是在mac環境安裝xcode-select --install之後,已經安裝有了gcc

Linux升級Python到3.5.2版本

方法 logs 支持 行修改 make bin tar etc img 原文出處:https://www.cnblogs.com/tssc/p/7762998.html 本文主要介紹在Linux(CentOS)下將Python的版本升級為3.5.2的方法 眾所周知,在202

linux升級npm以及node

port sta 開發者 rem ID 查看 簡單 穩定版 ret npm升級 廢話不多說,直接講步驟。先從容易的開始,升級npm。 npm這款包管理工具雖然一直被人們詬病,很多人都推薦使用yarn,但其使用人數還是不見減少,況且npm都是隨node同時安裝好的,一時讓我拋

Linux 升級 python2 到python3

-s 修改 stream deb 哪裏 wget 2.7 fix -c 一般情況下,系統自帶的python 版本都是2.7。python2.7是2系列的最後一個版本,已經停止開發,不久將會終止支持。可以通過以下命令檢查系統安裝的python 是什麽版本,例如以下版本是 py

Linux升級openssl

pac esp epo amp onf 鏈接庫 http align ref 公司由於使用第三方漏洞掃描,檢測出openssh存在漏洞,升級openssh後仍無效果,於是升級openssl OpenSSH do_setup_env函數權限提升漏洞(CVE-

linux升級軟體包版本等方法

       Linux環境下,要想檢視某個軟體(package)是否安裝。        rpm包方式安裝的,使用 rpm -qa | grep “軟體或者包的名字“。      

Linuxgcc編譯hello world

1. 確保Linux系統裡已經裝好了gcc 測試:輸入gcc後是如下的結果就說明已經安裝成功 2. 建立HelloWorld.c 使用 touch 建立一個空檔案; 用vim編輯   按下A或者I 插入 並輸入程式碼 輸入完成之後,按ESC退出 並輸入:wq(小寫)

Linux升級python

1 解壓Python-2.7.tgz tar-zxvf Python-2.7.tgz 2 進入Python-2.7的解壓目錄下 3 執行以下命令安裝 ./configure --prefix=/usr/local/python27 make make install 4 備份以前版本的pytho

如何在linux升級python

服務linux器自帶的是python2.6.無法安裝 pip install paramiko。總是報錯。 系統自帶的Python2.6又不能動。無奈只好再安裝一個版本。 自己嘗試手動升級python2.7 最後還是放棄了,因為安裝成功了,pip等元件也沒法使用,尷尬。

LinuxGCC的安裝以及第一個程式 hello,word

一.安裝 有兩個辦法:方法①在linux系統裡面聯網,然後在裡面下載(速度慢<100kb/s)                      方法②在虛擬機器裡面有個檔案共享功能,利用檔案共享,把Windows下載好的安裝包傳到linux裡面去。 step 2

阿里Linux升級PHP版本

1223 首先更新系統軟體 $ yum update 在centos7通過yum安裝PHP7,首先在終端執行: rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 如果提示錯誤:

阿里雲linux 升級PHP版本

首先更新系統軟體 $ yum update 在centos7通過yum安裝PHP7,首先在終端執行: rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 如果提示錯誤: error: Fa

Linux修改gcc和g++的版本

  1 前言   最近,自己在linux除錯matlab的mex的時候,突然發現matlab R2015版本對應的mex適配環境是gcc-4.7,而自己ubuntu的Linux對應版本預設卻是gcc

Linux升級安裝Python-2.7.8版本

本文主要介紹在Linux(CentOS)下將Python的版本升級為2.7.8的方法 1.下載安裝包 wget http://python.org/ftp/python/2.7.8/Python-2.7.8.tgz   2.解壓縮 編譯 安裝 如果報以上錯誤,請先安裝gcc,

linuxgcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄

原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解

基於LinuxGCC編譯器的內部預巨集定義與__attribute__屬性

***************************************************************************************************************************** 作者:EasyWav