编译安装 gcc 4.9并验证使用

编译安装 gcc 4.9并验证使用1. 准备环境(GCC 编译器)centOS 6.3cat /proc/versionLinux version 2.6.32-279.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Jun 22 12:19:21 UTC 2012gcc –versiongcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)2. 准备文件gcc-4.9.0.tar.gz官网()下载:

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

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.03.2. 下载编译准备文件主要是需要下面的库文件(需要完整版本,下载全部文件)MPFR=mpfr-2.4.2GMP=gmp-4.3.2MPC=mpc-0.8.1ISL=isl-0.12.2CLOOG=cloog-0.18.1执行./contrib/download_prerequisites如果编译机器不能上网,直接打开文本文件 download_prerequisites,把里面依赖的库下载回来后,,放在指定目录,然后注释下载命令,再次执行contrib/download_prerequisites,把相关文件解压,并建立链接。#vi contrib/download_prerequisites注释 wget 相关的内容,手动把这些文件下载回来,拷贝到工作目录 gcc-4.9.0下。#./contrib/download_prerequisites3.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-j4

#make install编译后安装到 /usr/local/gcc-4.9.03.4. 验证安装#cd /usr/local/gcc-4.9.0#./bin/gcc -v看到版本信息…线程模型:posixgcc 版本 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.9createthread 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> ^编译中断。

每一个成功者都有一个开始。勇于开始,才能找到成功的路。

编译安装 gcc 4.9并验证使用

相关文章:

你感兴趣的文章:

标签云: