1. 程式人生 > >編譯安裝 gcc 4.9並驗證使用

編譯安裝 gcc 4.9並驗證使用

毫秒 roc ati content + - stage config operator mpfr

編譯安裝 gcc 4.9並驗證使用

1. 準備環境(GCC 編譯器)
centOS 6.3
cat /proc/version
Linux version 2.6.32-279.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Jun 22 12:19:21 UTC 2012
gcc --version
gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)

2. 準備文件
gcc-4.9.0.tar.gz
官網(http://gcc.gnu.org/)下載:

ftp://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz

http://gcc.petsads.us/releases/


3. 安裝步驟
3.1. 解壓 gcc-4.9.0.tar.gz
得到文件夾 gcc-4.9.0,進入文件夾
#tar -xvzf gcc-4.9.0.tar.gz
#cd gcc-4.9.0

3.2. 下載編譯準備文件
主要是須要以下的庫文件(須要完整版本號,下載所有文件)
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1
ISL=isl-0.12.2
CLOOG=cloog-0.18.1
運行./contrib/download_prerequisites
假設編譯機器不能上網,直接打開文本文件 download_prerequisites,把裏面
依賴的庫下載回來後。放在指定文件夾,然後凝視下載命令,再次運行
contrib/download_prerequisites,把相關文件解壓,並建立鏈接。
#vi contrib/download_prerequisites
凝視 wget 相關的內容,手動把這些文件下載回來,復制到工作文件夾 gcc-4.9.0下。
#./contrib/download_prerequisites

3.3. 創建編譯文件夾並編譯安裝
#mkdir ../gcc-build-4.9.0

#cd ../gcc-build-4.9.0

#../gcc-4.9.0/configure?--prefix=/usr/local/gcc-4.9.0?--enable-stage1-checking=release?--enable-stage1-languages=c,c++,go

#make?-j?4


#make install
編譯後安裝到? /usr/local/gcc-4.9.0

3.4. 驗證安裝
#cd /usr/local/gcc-4.9.0
#./bin/gcc -v
看到版本號信息
...
線程模型:posix
gcc 版本號 4.9.0 (GCC)

3.5. 驗證編譯功能(C++ 2011)
構造代碼文件 test_gcc4.9.cpp,內容例如以下:

#include <string.h>
#include <iostream>
#include <stdio.h>
#include <thread>
#include <future>
using namespace std;

template<typename T> T stringcat(T &x,T &y)
{
?? ?std::cout<<"stringcat start...."<<endl;
?? ?x += x;
?? ?y += y;

?? ???? //睡眠指定毫秒數
?? ?std::this_thread::sleep_for(std::chrono::milliseconds(1000));

?? ?std::cout<<"stringcat end...."<<endl;
?? ?return x + y;
}

template<typename T> class CTheadOperator
{
?? ?public:
?? ??? ??? //採有創建線程發起異步調用
?? ??? ??? void createthread();
};

template<typename T> void CTheadOperator<T>::createthread()
{
?? ?std::string x = "x",y = "y";
?? ?auto b = std::bind(stringcat<std::string>,x,y);
?? ?std::cout<<"createthread wait stringcat....\n";
?? ?std::thread tp(b);
?? ?tp.join();
?? ? //註意觀察返回值的變化
?? ?std::cout<<"無參數被改動 "<<x<<" "<<y<<endl;
}

int main(int argc,char *argv[])
{
?? ? CTheadOperator<std::string> tp;
?? ? tp.createthread();


?? ?return 0;
}?? ?

編譯運行,註意看參數 -std=c++11,-lstdc++,證明是使用新標準
查看鏈接的動態庫,是新的庫
編譯後的文件可運行。運行正常
#/usr/local/gcc-4.9.0/bin/g++ -Wwrite-strings -std=c++11 test_gcc4.9.cpp -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lstdc++ -fpermissive -lpthread
#ldd test_gcc4.9
??????? linux-vdso.so.1 =>? (0x00007fff2fbff000)
??????? libstdc++.so.6 => /usr/local/gcc-4.9.0/lib64/libstdc++.so.6 (0x00007f94ae037000)
??????? libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003431800000)
??????? libm.so.6 => /lib64/libm.so.6 (0x0000003431000000)
??????? libgcc_s.so.1 => /usr/local/gcc-4.9.0/lib64/libgcc_s.so.1 (0x00007f94ade07000)
??????? libc.so.6 => /lib64/libc.so.6 (0x0000003430c00000)
??????? /lib64/ld-linux-x86-64.so.2 (0x0000003430800000
#./test_gcc4.9
createthread wait stringcat....
stringcat start....
stringcat end....
無參數被改動 x y?????? ?

3.6. 驗證編譯功能(C11),缺少 threads.h文件,編譯失敗
創建文件test_gcc4.9.c,內容例如以下:
#include <string.h>
#include <stdio.h>
//註意這行,路徑不一致
#include <thr/threads.h>

//註意這個,函數定義必須是
//typedef int(*_Thrd_start_t)(void *);
int fun(void *data)
{
??? printf("thread=%d\n", thrd_current());
??? //std::map<std::string, std::string> m;
??? //m.insert(std::make_pair("a1", "b1"));
??? //auto result = m.insert(std::make_pair("a1", "b1"));
??? //if (result.second)
??? //{
??????? //printf("m insert true %d,", thrd_current());
??????? //std:std::cout << "key=" << result.first->first << ",value=" << result.first->second << endl;
??? //}
??? //else
??? //{
?????? //printf("m insert fail %d\n", thrd_current());
??? //}
??? return 0;
}

int main(int argc,char *argv[])
{
??? thrd_t loc;
??? thrd_create(&loc, fun,0);
??? thrd_join(loc,0);
??? return 0;
}

編譯運行,註意看參數 -std=c11,-lgcc_s,證明是使用新標準
查看鏈接的動態庫,是新的庫
嗚呼,無法編譯成功,無法運行正常!!!
#/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread;
#test_gcc4.9.c:4:21: 致命錯誤:threads.h:沒有那個文件或文件夾
?#include <threads.h>
???????????????????? ^
編譯中斷。

後記:
安裝免費的 visual studio express 2013 後,正確編譯後運行正常;


編譯安裝 gcc 4.9並驗證使用