跳到主要內容

外行人編譯GCC

因為手上有某台很舊的伺服器,想要在上面編譯某個程式執行,無奈GCC版本是2.96編不過,於是興起自己編譯gcc的念頭。原本還想更新GLIBC,看了一下Glibc 2 HOWTO 中文版使用源代码将 Glibc 升级到 2.6就暫時打消念頭。


首先必須自己抓automake、autoconf、make、libtool等等的source 回來更新,這是因為手上的Linux版本太舊,早已沒有人維護套件。
我比較狠,都是解開後
./configure --prefix=/usr && make && sudo make install
直接蓋掉原來的程式,心臟不夠大顆或沒有備份千萬別這麼幹。

編譯GCC還需要GMPMPFRMPC
若是在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
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
這樣太危險應該要先用make DESTDIR=path-to-rootdir install確認一切正常再用sudo make install覆蓋原來的GCC,這裏的path-to-rootdir要用絕對路徑,不能用相對路徑。

裝完後So far so good,但不知何時會踩到地雷,好孩子千萬別這麼幹呀 ^_^

註:用這麼新的GCC有些Warning視同Error,例如 strict-aliasing rules,可以在configure套件時用configure  --disable-werror避開,這樣編譯Binutils等套件才能順利編譯。

留言

Allex Juang表示…
哇.. Glibc2 HOWTO 是我好幾年前一時興起翻的
沒想到現在竟然派上用場
真是令人高興

至於 gcc 的編譯 其實沒什麼好擔心的
記得 make 的過程中
gcc 會用編出來的 gcc 再對自己編譯一次
只有編譯成功才算 make 成功
所以就放心的用吧

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?