linux(Centos)下編譯安裝gcc4.8.2

歡迎轉載,轉載請註明原文地址:http://blog.csdn.net/majianfei1023/article/details/46811159


最近要用到c++ 11,所以沒辦法只得把那臺centos6.6的gcc4.4.7升級一下。

gcc編譯器已經出到5.1了,但是我對最新的版本並沒有特別大的興趣,更喜歡穩定性的版本。

gcc4.8.1 是第一個完全支持C++11 的編譯器,我這邊裝的是4.8.2.


一、獲取gcc4.8.2包並解壓縮:

下載鏈接:http://gcc.skazkaforyou.com/releases 

裏面有gcc所有的版本,自行下載。

也可以選擇: wgethttp://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz


然後解壓縮: tar -zxvf gcc-4.8.2.tar.gz


二、安裝依賴庫:
進入gcc-4.8.2目錄,執行./contrib/download_prerequisities腳本會自動下載三個依賴庫別爲gmp-4.3.2mpfr-2.4.2mpc-0.8.1

或者自己手動下載:
ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2
http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2
http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz


然後就是機械的安裝過程了。


cd gmp
./configure --prefix=/usr
sudo make && make install


cd mpfr
./configure --prefix=/usr
sudo make && make install


cd mpc
./configure --prefix=/usr
sudo make && make install



注:g++ -v 可以看到系統原有的gcc的安裝目錄 即--prefix變量的值(一般是/user或者/user/local),你自己安裝的時候配置跟它一樣是最好的了,這樣最方便。

如果編譯的時候是自定義指定的安裝路徑,那你就要把lib目錄放到ld.so.conf裏面並執行ldconfig了。

如果還不行,在編譯 gcc 時需要加上下面的選項:
--with-mpc=MPC的安裝目錄
--with-mpfr=MPFR的安裝目錄
--with-gmp=GMP的安裝目錄


三、編譯安裝GCC4.8.2
./configure --prefix=/usr --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib 
sudo make && make install


gcc的參數配置:
--prefix                  //默認gcc的安裝目錄,最好跟原有的gcc的安裝目錄一致
--disable-checking        //生成的編譯器在編譯過程中不做額外檢查,也可以使用--enable-checking=xxx來增加一些檢查;
--enable-languages        //指定gcc能編譯哪些語言的文件,每種語言用逗號分隔, 例如 c,c++,java

--disable-multilib        //默認gcc能在32位系統上將代碼編譯成64位程序,或者在64位系統上編譯成32位程序,如果加上這個編譯選項則表示關閉這個gcc的交叉編譯功能。


注:如果你不是裝在/usr 或者 /user/local 那麼鏈接到對應的目錄下就行了。


四、測試成功

查看gcc -v發現已經成功更新到4.8.2

執行一個示例:

#include <iostream>
#include <vector>
 
int main()
{
	int arr[] = {2,4,6,8,10};
	size_t count=sizeof(arr)/sizeof(arr[0]);
	std::vector<int> vec(arr,arr + count);
	//for (std::vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
	for (auto iter = vec.begin(); iter != vec.end(); ++iter)
	{
		std::cout<<*iter<<std::endl;
	}
	return 0;
}



g++ cpp11.cpp -o cpp11-std=c++11

如果不加-std=c++11就會編譯錯誤,因爲沒辦法識別auto iter,這是c++11纔有的語法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章