歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Fedora 15 降級安裝GCC-4.5.3 全過程以及遇到的問題和解決辦法總結

Fedora 15 降級安裝GCC-4.5.3 全過程以及遇到的問題和解決辦法總結

日期:2017/2/28 16:01:04   编辑:Linux教程

在這篇配置Linux系統下CUDA環境的文章提到(見 http://www.linuxidc.com/Linux/2011-12/49874.htm ),目前CUDA最新的版本4.1版本只支持gcc4.6版本以下的,而我的Fedora中的gcc是4.6.1的,為此需要將gcc降低版本,只要牽涉到修改gcc的就比較麻煩,而降低gcc版本更是復雜了,特此整理如下。

我用的是Fedora 15,裡面的 gcc編譯目前的最新版本是4.6.1。

1.首先在配置gcc的過程中會出現錯誤:gcc configure: error:Building GCC requires GMP 4.2+, MPFR 2.3.1+and MPC 0.8.0+。這說明要安裝gcc需要GMP、MPFR、MPC這三個庫,可從網上下載相應的壓縮包。

由於MPFR依賴GMP,而MPC依賴GMP和MPFR,所以要先安裝GMP,其次MPFR,最後才是MPC。這裡三個庫我用的版本分別是gmp4.2,mpfr2.3.1和mpc0.8.0。

先開始安裝GMP。解壓GMP的壓縮包後,得到源代碼目錄gmp-4.2(tar jxvf gmp-4.2.tar.bz2 –C /usr/local/,此處將gmp-4.2解壓到/usr/local/)。在該目錄的同級目錄下建立一個臨時的編譯目錄,這裡命名為gmp-build(mkdir /usr/local/gmp-build)。然後開始配置安裝選項,進入gmp-build目錄,輸入以下命令進行配置:

/usr/local/gmp-4.2/configure --prefix=/usr/local/gmp-4.2

這裡--prefix選項代表要將該庫安裝在哪裡,我是裝在/usr/local/gmp-4.3.2目錄下,後面的安裝都會用到這個選項。

這時在gmp的編譯目錄下就會生成一個makefile文件,現在開始編譯安裝。

make

make check

sudo make install

這樣就安裝好了gmp。


2.mpfr和mpc的安裝方法與此類似。不過要注意配置的時候要把依賴關系選項加進去,具體後面兩個庫配置命令如下:

/usr/local/mpfr-2.3.1/configure --prefix=/usr/local/mpfr-2.3.1 --with-gmp=/usr/local/gmp-4.2

/usr/local/mpc-0.8/configure --prefix=/usr/local/mpc-0.8 --with-gmp=/usr/local/gmp-4.2 --with-mpfr=/usr/local/mpfr-2.3.1

安裝好這三個庫之後,就可以正式開始安裝gcc了。


3.與此前一樣,先建一個編譯gcc的臨時目錄gcc-build,進入該目錄後配置安裝選項:

/usr/local/gcc-4.5.3/configure --prefix=/usr/local/gcc-4.5.3 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++,java --with-gmp=/usr/local/gmp-4.2 --with-mpfr=/usr/local/mpfr-2.3.1 --with-mpc=/usr/local/mpc-0.8

gcc的配置選項有很多,具體可以參考gcc源文件目錄下的安裝說明。這裡只安裝了c、c++和java的編譯器。(如果不指定編譯的語言,則會在make時不通過,爆出某些文件找不到等錯誤,所以還是建議在此指定編譯語言為c,c++,java)然後開始make編譯。為保險起見,需要在環境變量LD_LIBRARY_PATH添加前面三個庫的位置,鍵入以下命令(具體是):

vim /etc/profile ,即編輯profile文件,還需要修改讀寫權限,用chmod o+w /etc/profile。再在最後添加如下代碼:

expor

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8/lib:/usr/local/gmp-4.2/lib:/usr/local/mpfr-2.3.1/lib

然後重新make編譯,在經過漫長的1小時等待後,終於編譯完成。在安裝說明裡面還有測試這一步,不過那是可選的。直接make install安裝,至此gcc就全部安裝完成了。不過目前還不能使用新版本的gcc,因為新版的可執行文件還沒加到命令的搜索路徑中。在這裡我為新版的 gcc和g++命令分別建立了一個軟鏈接。進入/usr/bin目錄後,鍵入如下命令建立軟鏈接。

sudo ln -s /usr/local/gcc-4.5.3/bin/gcc gcc45

sudo ln -s /usr/local/gcc-4.5.3/bin/g++ g++45

這樣我使用新版本gcc的時候就可以用gcc45和g++45命令,同時也可使用原來的gcc編譯程序。當然這裡也可以直接將/usr/bin目錄下gcc,g++命令重新鏈接到新版本的gcc可執行文件。在正式使用之前還有最後一個工作要做,就是將前面安裝的三個庫的路徑加進環境變量LD_LIBRARY_PATH中,不然在編譯程序的時候會出錯。由於我不想每次編譯程序都生成環境變量,所以需要編輯/etc目錄下的bashrc文件 配置shell環境。在這個文件中添加以下語句:

LD_LIBRARY_PATH=:/usr/local/mpc-0.8/lib:/usr/local/gmp-4.2/lib:/usr/local/mpfr-2.3.1/lib:/usr/local/gcc-4.5.3/lib

export LD_LIBRARY_PATH

保存重啟系統後,就可以使用新裝的gcc了。

以上就是我在Fedora 15安裝gcc4.2.0的全過程。

4. 我在/usr/bin 目錄下關於gcc、g++ 的文件主要有以下四個:

gcc g++

gcc45 g++45

上面一行的是原來的高版本的4.6.1的gcc版本,下面一行是新安裝的低版本的4.5.3的gcc版本的軟鏈接(我理解為就是低版本的gcc本身),現在系統默認執行gcc還是4.6.1的gcc,執行gcc45就是4.5的gcc,我在編譯其他源碼的時候,由於是configure配置的,需要修改默認的系統gcc版本,所以我把這個目錄下的原來的gcc 改名為gcc.bak(mv /usr/bin/gcc /usr/bin/gcc.bak) ,把gcc45改名gcc(mv /usr/bin/gcc45 /usr/bin/gcc),這樣我的默認的gcc環境就是低版本4.5.3的了,g++(mv /usr/bin/g++ /usr/bin/g++.bak ;mv /usr/bin/g++45 /usr/bin/g++)也一樣操作。

當需要改回默認設置是高版本時候,執行反操作,把gcc改成gcc45,把 gcc.bak 改成gcc,就是高版本的4.6.1為默認了,g++的改名也一樣操作。


5.安裝完gcc並重啟後,發現系統很慢了,而且firefox浏覽器、文件系統等都打不開了,只有終端能打開了,很郁悶啊,問題還沒完全解決呢,又出現了一個問題啊,於是又費了好大的勁才弄好。

首先,在終端輸入命令 firefox,然後出現錯誤提示:Couldn‘t load XPCOM。這個問題很奇怪,其他什麼都沒有,我在網上查了查,沒有類似的問題。我當時用的是firefox 7.0版本的,後來就升級了一下,用 yum update firefox,更新完畢後,又用命令 firefox試了試,這時出現問題如下:

XPCOMGlueLoad error for file /usr/lib/xulrunner-2/libxpcom.so: /usr/local/gcc-4.5.3/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found (required by /usr/lib/xulrunner-2/libxul.so)

Couldn't load XPCOM.

後來,又在網上查閱資料,才弄明白,也費了一番周折的。

執行命令:strings /usr/local/gcc-4.5.3/lib/libstdc ++.so.6 | grep GLIBC 顯示如下:

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
GLIBC_2.0
GLIBC_2.3
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

又執行 ls -l /usr/local/gcc-4.5.3/lib/libstdc ++.so.6 顯示如下:

lrwxrexrwx. 1 root root 19 12月 19 19:00 /usr/local/gcc-4.5.3/lib/libstdc++.so.6 -> libstdc++.so.6.0.14

意思是低版本的gcc-4.5.3的libstdc++.so.6 與libstdc++.so.6.0.14建立了軟連接。

重復上面的兩行命令,只不過是用/usr/lib/libstdc++.so.6替換了 /usr/local/gcc-4.5.3/lib/libstdc++.so.6,可以查到這裡包含‘GLIBCXX_3.4.15’,且軟連接是:/usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.16,顯然是指原來高版本gcc-4.6.1的libstdc++.so.6 與libstdc++.so.6.0.16建立了軟連接。而現在用了低版本的gcc-4.5.3,卻缺少了‘GLIBCXX_3.4.15’,那麼把

低版本的gcc-4.5.3的libstdc++.so.6 與libstdc++.so.6.0.16建立軟連接,應該就可以解決這個問題了吧。

首先復制:cp /usr/lib/libstdc++.so.6.0.16 /usr/local/gcc-4.5.3/lib/

然後建立軟連接:ln -s /usr/local/gcc-4.5.3/lib/libstdc++.so.6.0.16 /usr/local/gcc-4.5.3/lib/libstdc++.so.6

試了試命令 firefox,發現可以打開浏覽器了,文件系統也能打開了,這說明這個方法可行,雖然不明白其中的道理。

Copyright © Linux教程網 All Rights Reserved