跳到主要內容

外行人編譯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 成功
所以就放心的用吧

這個網誌中的熱門文章

在Windows Server設定L2TP over IPSec VPN

簡單地說,macOS Sierra與iOS 10發表後,大家忽然發現Apple不再支援PPTP,所以一定得設定其他的VPN型態。若不要另外裝client,用L2TP是最方便的,SSL VPN雖然好,但若沒有安裝Agent要連線到任一電腦或是非網頁服務還是挺麻煩的。

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

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

DBeaver 介面語言

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