ubuntu10.4環境下默認的GCC版本爲4.4.3,因爲編譯環境的GCC版本爲3.2.2,想在ubuntu上使用編譯環境版本的GCC,故須要將GCC版本降級到3.2.2。GCC在新版本加入了一些高級特性,致使從GCC4.4.3不能直接降級到3.2.2。本文經過嘗試,能夠經過階段性的降級方案,即先從GCC4.4.3降級到 GCC3.4.4版本,再從GCC3.4.4降級到GCC3.2.2。如下是重要的操做步驟和過程當中問題的解決方法。 linux
(1)能夠在http://gcc.gnu.org/網站,經過任何一個鏡像站點來下載GCC3.4.4版本和GCC3.2.2版本,本文的下載路徑爲ftp://gd.tuwien.ac.at/gnu/gcc/releases /gcc-3.4.4/gcc-3.4.4.tar.bz2和ftp://gd.tuwien.ac.at/gnu/gcc/releases/gcc- 3.2.2/gcc-3.2.2.tar.bz2。 c++
(2)安裝GCC3.4.4。首先在編譯環境下執行gcc –v來獲取GCC的configure信息,本文中其結果爲: ubuntu
xxx/ABC /home/xxx # gcc -v bash
Readingspecs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs 網站
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux .net
Thread model: posix get
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) it
在降級的設備上將gcc-3.4.4.tar.bz2解壓以後進入解壓目錄,參考編譯環境中GCC的配置來配置當前的GCC3.4.4。 io
./configure --prefix=/usr/local/gcc-3.4.4/ --mandir=/usr/local/gcc-3.4.4/share/man --infodir=/usr/local/gcc-3.4.4/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --enable-languages=c,c++ 編譯
其中的prefix、mandir、infodir均可以根據本身的須要來設置,configure以後執行make && make install。
其中在make的過程當中會出現如下錯誤:www.it165.net
In function 'open',
inlined from 'collect_execute' at ./collect2.c:1537:
/usr/include/bits/fcntl2.h:51: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT in second argument needs 3 arguments
解決的方法是修改gcc/collect2.c的1537行,將原來的
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);修改成
redir_handle = open (redir, O_WRONLY, O_TRUNC | O_CREAT);
即將原來open調用中的2個參數修改成3個參數,而後從新進行make和make install便可完成GCC3.4.4的安裝,
(3)爲了在某些場景下繼續使用GCC4.4.3能夠經過如下方式保留GCC4.4.3,方法是在gcc的安裝路徑/usr/bin/目錄下按照如下步驟操做。
mv gcc gcc-4.4.3
mv g++ g++-4.4.3
ln –s /usr/local/gcc-3.4.4/bin/gcc gcc
ln –s /usr/local/gcc-3.4.4/bin/g++ g++
這樣GCC4.4.3和GCC3.4.4就能夠共同存在了。
(4)安裝了GCC3.4.4,還要修改/etc/bash.bashrc在其末尾增長如下內容,以讓其正確連接到它須要的庫。
LD_LIBRARY_PATH=/usr/local/ gcc-3.4.4/lib
export LD_LIBRARY_PATH
經過以上操做從新source /etc/bash.bashrc後就可使用gcc3.4.4了。
(5)一樣按照上面的方法能夠在GCC3.4.4的基礎上安裝GCC3.2.2,所不一樣的是在configure的過程當中須要指定不一樣的安裝路徑。安裝完成以後執行gcc –v能夠看到如下輸出。
root@xxx-desktop:/usr/local/gcc-3.4.4/bin# gcc -v
Readingspecs from /usr/local/gcc-3.2.2//lib/gcc-lib/i686-pc-linux-gnu/3.2.2/specs
Configured with: ./configure --prefix=/usr/local/gcc-3.2.2/ --mandir=/usr/local/gcc-3.2.2/share/man --infodir=/usr/local/gcc-3.2.2/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --enable-languages=c,c++
Thread model: posix
gcc version 3.2.2