[gcc] 最近遇到的問題 – gcc 4.5.2 在linux上編譯遇到的問題

這是專題學長開的作業,遇到的問題

1. 準備一個Linux環境,用麼distribution不管,但一定要使用bash shell
2. 請去下載gcc的原始碼並自行編譯之

.

也就是說不能夠用懶人包偷懶打混過去(嘆)

可以參考http://www.hkitn.com/print.php/2613這網頁

但是,故事總是一波三折

我在虛擬機器上用ubuntu 10.4,結果configure時出現

gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

恩好吧,goo了一下,可能是ubuntu內建的版本太舊,所以請參考此網頁http://hi.baidu.com/ldg__2050/blog/item/4b0fb514d96a675df3de32d7.html

我把整個流程重複一遍

.

0.設定好ubuntu或你的linux環境

硬碟可以留大一點,大約5G

.

1.下載gcc的原始碼 (官網http://gcc.gnu.org/ 台灣學網載點ftp://ftp.ntu.edu.tw/pub/gnu/gnu/)

下載gmp的原始碼 (官網http://gmplib.org/)

下載mpfr的原始碼 (官網http://www.mpfr.org/)

下載mpc的原始碼 (官網http://www.multiprecision.org/index.php?prog=mpc&page=platforms)

並分別解壓縮

我使用的版本是

  • gcc 4.5.1
  • gmp 5.0.1
  • mpfr 3.0.0
  • mpc 0.8.2

.

2.接下來是終端機文字介面操作,怕權限不完全可以先切到root

  • sudo su –
  • 輸入root密碼

先用aptitude裝m4,避免出現問題(m4: gmp configure: error: No usable m4 in $PATH or /usr/5bin)

  • aptitude install build-essential m4

然後依序安裝gmp mpfr mpc,順序就是configure, make, make install,其中make install需要sudo權限

下指令

  • ../gmp-5.0.1/configure –prefix=/usr/local/gmp-5.0.1             ##/usr/local/gmp-5.0.1   是要解開的位置
  • make
  • make check                ##選用
  • make install

然後是mpfr

  • ../mpfr-3.0.0/configure –prefix=/usr/local/mpfr-3.0.0 –with-gmp=/usr/local/gmp-5.0.1
  • make
  • make install

然後是mpc

  • ../mpc-0.8.2/configure –prefix=/usr/local/mpc-0.8.2 –with-gmp=/usr/local/gmp-5.0.1 –with-mpfr=/usr/local/mpfr-3.0.0
  • make
  • make install

.
4.同樣道理去安裝gcc

不過似乎在ubuntu 10.4+gcc 4.5做configure時會遇到一個問題

(error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory)

解法是添加環境設定

  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.2/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-3.0.0/lib
  • 然後再做configure,我後面的參數是寫這樣
    ../gcc-4.5.1/configure –prefix=/usr/local/gcc-4.5.1 –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++,java –with-gmp=/usr/local/gmp-5.0.1 –with-mpfr=/usr/local/mpfr-3.0.0 –with-mpc=/usr/local/mpc-0.8.2
  • make
    在這裡會佔用非常久的時間和空間,大約兩個小時,而且硬碟使用超過1.5G,所以空間千萬要留夠

比較麻煩的是,如果使用mpfr3.0.0,可能make到一半會遇到這種問題

checking for suffix of object files… configure: error: cannot compute suffix of object files: cannot compile

See `config.log’ for more details.

make[2]: *** [configure-stage1-target-libgcc] Error 1

make[2]: Leaving directory `/tmp/gcc-4.5.1′

make[1]: *** [stage1-bubble] Error 2

make[1]: Leaving directory `/tmp/gcc-4.5.1′

make: *** [bootstrap] Error 2

去gcc-4.5.1/i686-pc-linux-gnu/libgcc下看config.log

可以發現

error while loading shared libraries: libmpfr.so.4: cannot open shared object file:No such file or directory

問題可能出在mpfr的libmpfr.so.4,在這篇文章中認為新版的gcc 4.5.0+需要libmpfr.so.4,可是mpfr2.4.2的版本則在libmpfr.so.1.2.2,使用複製sudo cp libmpfr.so.1.2.2 libmpfr.so.4 以修正此問題

在這邊我嘗試好了幾遍(也因為是最花時間的地方,make到發生問題可能都要20分鐘),試過搭配mpfr3.0.0或mpfr2.4.2

總之mpfr3.0.0好像是2010/6才更新的,架構的更換讓新舊版本中出現差異,然後我卡在這裡

有同學使用降轉mpfr 2.4.2成功,有人使用3.0.0安裝成功,很莫名,還是說我之前直接複製參數有使用到2.4.2的位置沒發現?

總之我最後用gcc 4.5.1 + mpfr 3.0.0安裝成功,因為是虛擬機器所以make了幾乎三個小時

.

5.測試

當然就是hello world

  • vim helloworld.c
  • i輸入模式#include <stdio.h>
    int main(void){
    printf(“hello world. \n");
    return 0;
    }
  • 存檔離開Esc  ~  wq
  • gcc helloworld.c
  • 目錄下多了a.out,執行之./a.out

看得到文字就大功告成了

廣告

One thought on “[gcc] 最近遇到的問題 – gcc 4.5.2 在linux上編譯遇到的問題

迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s