因為手上有某台很舊的伺服器,想要在上面編譯某個程式執行,無奈GCC版本是2.96編不過,於是興起自己編譯gcc的念頭。原本還想更新GLIBC,看了一下Glibc 2 HOWTO 中文版和使用源代码将 Glibc 升级到 2.6就暫時打消念頭。
首先必須自己抓automake、autoconf、make、libtool等等的source 回來更新,這是因為手上的Linux版本太舊,早已沒有人維護套件。
我比較狠,都是解開後
編譯GCC還需要GMP、MPFR和MPC。
若是在Mac OS利用ports可安裝上述套件;若用Homebrew裝MPC似乎是版本未更新,所以得手動下載新版,得注意。
我原本沒有仔細看文件就硬編,所以才會在autoconf時遇到上面那些套件太舊的問題。再來一定要好好看Installing GCC這份官方文件,不會太長。GCC有一點和平常編譯套件不同,GCC不建議在原始程式目錄下編譯,測試過確實會干擾,必須要在另一個目錄編譯才不會發生錯誤。我的步驟如下:(註:NTU似乎更新有問題,所以我改用twaren的mirror)
裝完後So far so good,但不知何時會踩到地雷,好孩子千萬別這麼幹呀 ^_^
註:用這麼新的GCC有些Warning視同Error,例如 strict-aliasing rules,可以在configure套件時用configure --disable-werror避開,這樣編譯Binutils等套件才能順利編譯。
首先必須自己抓automake、autoconf、make、libtool等等的source 回來更新,這是因為手上的Linux版本太舊,早已沒有人維護套件。
我比較狠,都是解開後
./configure --prefix=/usr && make && sudo make install直接蓋掉原來的程式,心臟不夠大顆或沒有備份千萬別這麼幹。
編譯GCC還需要GMP、MPFR和MPC。
若是在Mac OS利用ports可安裝上述套件;若用Homebrew裝MPC似乎是版本未更新,所以得手動下載新版,得注意。
我原本沒有仔細看文件就硬編,所以才會在autoconf時遇到上面那些套件太舊的問題。再來一定要好好看Installing GCC這份官方文件,不會太長。GCC有一點和平常編譯套件不同,GCC不建議在原始程式目錄下編譯,測試過確實會干擾,必須要在另一個目錄編譯才不會發生錯誤。我的步驟如下:(註:NTU似乎更新有問題,所以我改用twaren的mirror)
wget http://ftp.twaren.net/Unix/GNU/gnu/gcc/gcc-4.7.0/gcc-4.7.0.tar.gz這樣太危險應該要先用make DESTDIR=path-to-rootdir install確認一切正常再用sudo make install覆蓋原來的GCC,這裏的path-to-rootdir要用絕對路徑,不能用相對路徑。
tar xzf gcc-4.7.0.tar.gz
mkdir gccbuild && cd gccbuild
../gcc-4.7.0/configure --prefix=/usr
make BOOT_CFLAGS='-O' bootstrap
sudo make install
裝完後So far so good,但不知何時會踩到地雷,好孩子千萬別這麼幹呀 ^_^
註:用這麼新的GCC有些Warning視同Error,例如 strict-aliasing rules,可以在configure套件時用configure --disable-werror避開,這樣編譯Binutils等套件才能順利編譯。
留言
沒想到現在竟然派上用場
真是令人高興
至於 gcc 的編譯 其實沒什麼好擔心的
記得 make 的過程中
gcc 會用編出來的 gcc 再對自己編譯一次
只有編譯成功才算 make 成功
所以就放心的用吧