本文將介紹如何在 Ubuntu 12.04 下編譯 gcc 4.7,我很奇怪的是在 Ubuntu 下編譯 gcc 源碼也那麼復雜,不過 Ubuntu 也是 Linux 系統之一,就沒什麼好奇怪的了。
首先檢查你是否已經默認安裝 Ubuntu gcc 和 binutils ,如果你使用了 64 位的桌面版本,那麼默認是已經安裝了。下面的部分我們建議你打開一個終端來執行相應的命令。
在此之前建議更新下系統,執行如下命令:
1
sudo
apt-get
install
update
2
sudo
apt-get
install
upgrade
接下來我們需要安裝一些所需的軟件包:
1
sudo
apt-get
install
g++
2
sudo
apt-get
install
gawk
3
sudo
apt-get
install
m4
4
sudo
apt-get
install
gcc-multilib
然後從 GNU 網站上下載最新的 gcc-4.7 源碼,請訪問 http://gcc.gnu.org/mirrors.html 然後選擇 gcc-4.7 的最新穩定版本,文件名是 gcc-4.7.0.tar.bz2. 將它保存到本地。
你還需要另外三個庫才能成功編輯 gcc,這三個庫分別是:mpc, mpfr 和 gmp. 使用鏈接進入下載最新版本分別是:gmp-5.0.4.tar.bz2, mpc-0.9.tar.gz 和 mpfr-3.1.0.tar.gz ,並且保存到跟 gcc 4.7 源文件所在的同一個目錄。
打開終端進入上述幾個文件所在的目錄:
1
cd
~
2
cd
Downloads
我們先開始編譯 gmp 庫
1
cd
gmp*
2
mkdir
build &&
cd
build
3
../configure --prefix=/usr/gcc_4_7 --build=x86_64-linux-gnu
4
make
5
sudo
make
install
幾分鐘後你將有一個已編譯好和安裝好的 gmp 庫,如果一切順利,恭喜你!
使用相同的步驟來編譯 MPFR:
1
cd
..
2
cd
..
3
cd
mpfr*
4
mkdir
build &&
cd
build
5
../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7
6
make
7
sudo
make
install
緊接著是 MPC:
1
cd
..
2
cd
..
3
cd
mpc*
4
mkdir
build &&
cd
build
5
../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7 --with-mpfr=/usr/gcc_4_7
6
make
7
sudo
make
install
到這一步就完成個 gcc 所需包的編譯和安裝,在某些機器上這三者的編譯可能超過一個小時,做好心理准備。
接下來我們可以開始編譯 C/C++ 和 Fortran 編譯器:
01
cd
..
02
cd
..
03
mkdir
build &&
cd
build
04
export
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
05
export
C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
06
export
CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
07
../gcc-4.7.0/configure --build=x86_64-linux-gnu --prefix=/usr/gcc_4_7 --with-gmp=/usr/gcc_4_7 --with-mpfr=/usr/gcc_4_7 --with-mpc=/usr/gcc_4_7 --
enable
-checking=release --
enable
-languages=c,c++,fortran --disable-multilib --program-suffix=-4.7
08
make
09
sudo
ln
-s /usr/lib/x86_64-linux-gnu /usr/lib64
10
sudo
make
install
下面命令可將 gcc 4.7 添加到系統路徑中,或者直接編輯 .bashrc 文件並在最後添加下面一行:
1
export
PATH=/usr/gcc_4_7/bin:$PATH
你不知道什麼是 .bashrc 文件?沒關系,打開終端執行:
1
cd
~
2
gedit .bashrc
使用下面命令重新加載 .bashrc 文件:
1
./.bashrc
下面是調用編譯器的簡單方法
1
g++-4.7
test
.cpp -o
test
如果你的磁盤空間緊張,記得刪除源碼文件目錄下的 *build* 子目錄。
接下來我們檢查 g++-4.7 是否能編譯一些 C++11 規范的代碼,打開你喜好的編輯器,復制下面一段代碼並保持該文件為 tst_lambda.cpp:
01
//Program to test the new C++11 lambda syntax
02
#include <iostream>
03
04
using
namespace
std;
05
06
int
main()
07
{
08
cout << [](
int
m,
int
n) {
return
m + n;} (2,4) << endl;
09
return
0;
10
}
編譯並運行上述 lambda 示例將返回 6:
1
g++-4.7 -std=c++11 tst_lambda.cpp -o tst_lambda
2
./tst_lambda
3
6
g++-4.7 同時也支持 C++11 線程:
01
//Create a C++11 thread from the main program
02
03
#include <iostream>
04
#include <thread>
05
06
//This function will be called from a thread
07
void
call_from_thread() {
08
std::cout <<
"Hello, World!"
<< std::endl;
09
}
10
11
int
main() {
12
//Launch a thread
13
std::
thread
t1(call_from_thread);
14
15
//Join the thread with the main thread
16
t1.join();
17
18
return
0;
19
}
如果你是一個 Fortran 開發者,你可以使用 Fortran 2008 特性,例如 do concurrent
01
integer,parameter::mm=100000
02
real::a(mm), b(mm)
03
real::fact=0.5
04
05
! initialize the arrays
06
! ...
07
08
do concurrent (i = 1 : mm)
09
a(i) = a(i) + b(i)
10
enddo
11
12
end
編譯並執行上述代碼:
1
gfortran-4.7 tst_concurrent_do.f90 -o tst_concurrent_do
2
./tst_concurrent_do
至此,你已經完成了在 Ubuntu 12.04 上編譯 GCC 4.7 的所有步驟。