→ shininglion:這篇文章值 821 P 幣... 02/22 00:15
※ 編輯: shininglion 來自: 220.133.134.61 (02/22 00:17)
為了避免自己忘記,先 PO 在這做個紀錄XD
一般來說如果能直接用套件管理員更新所要的套件的話當然最好
因為這樣比較方便,管理上也比較輕鬆~
不過這次之所以會想更新 gcc 主要是現在 server 的 gcc 版本不夠新
有些 c++0x 的東西還沒有支援,因為不想重寫 code
所以乾脆就把 gcc 更新一下XD
(關於 C++0x 有支援什麼東西請見 reference)
更新 gcc 所需的套件可在以下的 GNU 網站上下載
http://www.gnu.org/software/software.html
這次我的作法是下載 gcc 的 source 下來自己重新編這樣
要手動更新任何套件第一件要注意的事情就是套件相依性的問題
要如何得知這個套件跟那些套件有相依性可以在
$ configure
跑完後看結果,如果相依性沒有問題就會跑出 Makefile 讓你 compile
有問題的畫看一下 error message 或是 log 就可以知道還少了那些東西
gcc 的相依套件有這些:gmp, mpfr, mpc
其中 mpfr 相依 gmp、mpc 相依 gmp 跟 mpfr
所以安裝順序一定是 gmp -> mpfr -> mpc -> gcc
順序不能錯!
不過如果系統已經有的東西當然也就不用裝了這樣~
這次因為 server 上 3 個都版本都太舊,所以要從 gmp 開始編
這次編 gcc-4.6.2 分別用到的是
gmp-4.3.2、mpfr-2.4.2、mpc-0.8.1
接下來說明詳細步驟:
1. 首先先把所有套件找個地方解壓縮
一般可能會在 /tmp 這個資料夾底下
(因為這邊專門放雜物= =+)
2. 一般來說自己編的套件都會放在 /usr/local 這個資料夾底下
這邊沿用這個慣例,在 /usr/local 底下分別建了這 4 個資料夾:
gmp-4.3.2、mpfr-2.4.2、mpc-0.8.1、gcc-4.6.2
3. 誠如前面所說,先編 gmp 這個套件:
a. 先切到 /usr/local/gmp-4.3.2 這個資料夾裡
$ /tmp/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2
--prefix 主要是設定之後 gmp 的相關東西要去哪裡找
(如果我沒記錯的話= =a)
b. $ make
c. $ make install
4. 再來編 mpfr 這個套件:
a. 先切到 /usr/local/mpfr-2.4.2 這個資料夾裡
$ /tmp/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2
--with-gmp=/usr/local/gmp-4.3.2
--with-gmp 是設定在編 mpfr 時去找剛剛編好的 gmp
b. $ make
c. $ make install
5. 再來編 mpc 這個套件:
a. 先切到 /usr/local/mpc-0.8.1 這個資料夾
$ /tmp/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1
--with-gmp=/usr/local/gmp-4.3.2
--with-mpfr=/usr/local/mpfr-2.4.2
b. $ make
c. $ make install
6. 以上都準備完畢後就可以來編恐怖的 gcc 了:
備註:因為 gcc 非常龐大,全部編完大概要一小時Orz
昨天因為一直搞不定重編了 3 次...累死我也...|||
建議可以搭配 screen 避免不能關掉 terminal 的窘境XD
a. 先切到 /usr/local/gcc-4.6.2 這個資料夾
/tmp/gcc-4.6.2/configure --prefix=/usr/local/gcc-4.6.2
--with-gmp=/usr/local/gmp-4.3.2
--with-mpfr=/usr/local/mpfr-2.4.2
--with-mpc=/usr/local/mpc-0.8.1
--enable-threads=posix
--disable-checking
--enable--long-long
--enable-languages=c,c++
--with-system-zlib
以上是我在 server 上編 gcc 下的參數
這些 google 一下大概就會知道可以怎麼下了
b. $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
:/usr/local/gmp-4.3.2/lib
:/usr/local/mpfr-2.4.2/lib
:/usr/local/mpc-0.8.1/lib
注意,這一整行中間不要斷開,我只是因為這樣排版比較好看= =a
不過說真的這一行這時候不下好像不影響= =a
c. $ make
d. $ make install
7. 都編完後再來就是設定系統囉!
a. 先利用以下指令找出 gcc/g++ 到底都是放在哪個資料夾裡:
$ which gcc | sed 's/gcc//g'
在 server 上是在 /usr/bin 這裡
b. 再來在這邊建立一個 soft link 到剛剛編好的 gcc 那裡
$ ln -s /usr/local/gcc-4.6.2/bin/gcc /usr/bin/gcc
g++ 也是:
$ ln -s /usr/local/gcc-4.6.2/bin/g++ /usr/bin/g++
備註:做這個 link 前可以先把舊的 gcc 改名
c. 再來為了要讓 gcc 能夠找到這些套件不用每次都重新設定
所以要設定一下 library path
設定方法可以附加在 LD_LIBRARY_PATH 後面
(如 6-b,可以直接寫死在 /usr/.bashrc)
或者是用下面這個方法:修改 /etc/ld.so.conf
i. 在 /etc/ld.so.conf 這個檔案後面附加上下面這三行
/usr/local/gmp-4.3.2
/usr/local/mpfr-2.4.2
/usr/local/mpc-0.8.1
備註:可能只要 /usr/local/mpc-0.8.1 就夠了
不過為了省事我就乾脆全加了
ii. $ ldconfig (不要打錯喔,是 "L"dconfig)
d. 之後要讓 GLIBCXX 可以抓到正確的版本:
i. cp /usr/local/gcc-4.3.2/x86_64-unknown-linux-gnu
/libstdc++-v3/src/.libs/libstdc++.so.6.0.16
/usr/lib
1、2 行那個路徑其實是連在一起的,不過他太長了只好斷開...|||
gcc-4.6.2 找到的是 libstdc++.so.6.0.16
這個可能要看到時候編完後的數字是多少自己更動
另外在 server 上他是去 /usr/lib64 上找的
如果不知道是一個就先以 /usr/lib 為主
有問題再看他是說哪一個資料夾這樣XD
ii. 再來先刪掉舊的 link:
$ rm -f /usr/lib/libstdc++.so.6
iii. 然後 redirect link 到現在這個版本:
$ ln -s /usr/lib/libstdc++.so.6.0.16 /usr/lib/libstdc++.so.6
8. 如果覺得 /tmp 裡的東西站著很礙眼這時候可以把它通通清空囉!
這樣就大功告成啦!!
之後可以用 $ gcc -v 確認 gcc 的版本
然後跑個測試程式看看會不會動囉!
要移除掉的話上面有些步驟就改成做 backup 而不是直接刪掉
然後把整個過程中多產生的檔案給刪了
再把修改過的檔案復原就可以了!
References:
1. C++0x: http://en.wikipedia.org/wiki/C%2B%2B11
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.134.61