编译安装 gcc 4.9并验证使用

1. 准备环境(GCC 编译器)
centOS 6.3
cat /proc/version
Linux 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 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并验证使用的更多相关文章

  1. CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置

    在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 今天在isocpp上看到"GCC 4.8.1 released, C++11 feature ...

  2. CentOS6.5升级手动安装GCC4.8.2 与 CentOS 6.4 编译安装 gcc 4.8.1

    http://blog.163.com/zhu329599788@126/blog/static/6669335020161179259975 http://www.cnblogs.com/codem ...

  3. 在CentOS 6.4中编译安装gcc 4.8.1

    在CentOS 6.4中编译安装gcc 4.8.1 分类: C/C++ Linux/Unix2013-11-28 21:02 1877人阅读 评论(0) 收藏 举报 原文链接:http://www.c ...

  4. CentOS6编译安装gcc高版本

    编译安装gcc高版本 因CentOS中gcc版本仅有4.4,故编译安装gcc高版本. 安装依赖库(如果你已安装过gcc低版本,可跳过这步) yum install glibc-static libst ...

  5. CentOS编译安装GCC 4.9.2成功

    在Linux上编译安装gcc是个寻烦恼的活,对于像我这样习惯于在Windows上面使用二进制安装包的人来说,自已编译安装gcc是个相当大的挑战,今天直接挑战最新版的gcc,是4.9.2版本的,做之前查 ...

  6. 转:在CentOS下编译安装GCC

    转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术  秋水逸冰  发布于: 2015-09-02  更新于: 2015-09-02  6519 次围观 ...

  7. CentOS手动编译安装gcc

    最近尝试了fedora.ubuntu.mint.debian.opensuse等多种linux发行版,与CentOS比较之后还是感觉之前用的CentOS比较熟悉,比较习惯.现在CentOS的最新版本为 ...

  8. [转] 编译安装GCC

    Linux下编写C/C++程序自然缺不了一个优秀的编译器,Linux下比较常见的自然是GCC了. 2015年GCC也出到了5.2.0版本,对于C++11/14也有了更好的支持了. 所以,今天我们就来说 ...

  9. 编译安装GCC 4.7.2

    from:http://blog.chinaunix.net/uid-20717979-id-3485672.html 安装gcc需要GMP.MPFR.MPC这三个库,可从ftp://gcc.gnu. ...

随机推荐

  1. JNI 资源释放

    JNI 编程实现了 native code 和 Java 程序的交互,因此 JNI 代码编程既遵循 native code 编程语言的编程规则,同时也遵守 JNI 编程的文档规范.在内存管理方面,na ...

  2. FZOJ--2212--Super Mobile Charger(水题)

    Problem 2212 Super Mobile Charger Accept: 3    Submit: 11 Time Limit: 1000 mSec    Memory Limit : 32 ...

  3. matplotlib 可视化 —— 移动坐标轴(中心位置)

    通常软件绘图,包括 matlab.python 的 matplotlib,默认都是将坐标轴置于画布(figure)的最下侧(x 轴),最左侧(y 轴),也即将坐标原点置于左下角.而我们自己理解数学,以 ...

  4. OpenGL编程逐步深入(七)旋转变换

    准备知识 这一节我们来看一下旋转变换.旋转变换指的是给我们一个指点的点和角度,我们需要绕着过该点的轴线將对象旋转对应的角度.这里我们只改变X/Y/Z中的两个分量,第三个分量保持不变.这意味着我们的图形 ...

  5. 当fastJson邂逅大写字段时

    在项目中遇到了一件令人头疼的事.使用fastJson反序列化时下面的Json时,得到对象属性总为null(如下图),可能细心的朋友一看就知道问题出在哪里,没错!问题就出在返回的字段首字母给大写了.fa ...

  6. ListView 适配器实现getviewtypcount() 数组越界IndexOutOfBoundException

    ListView中Item的多布局显示,需要用到了getViewTypecount和getItemViewType这两个重写方法,但是做完后出现了如下提示错误:java.lang.ArrayIndex ...

  7. [JSOI2008]火星人 hash+splay

    题目描述: 现在,火星人定义了一个函数 LCQ(x, y)LCQ(x,y),表示:该字符串中第 xx 个字符开始的字串,与该字符串中第 yy 个字符开始的字串,两个字串的公共前缀的长度.比方说,LCQ ...

  8. 守护、互斥锁、IPC和生产者消费者模型

    守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are ...

  9. 【Uva 11584】Partitioning by Palindromes

    [Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...

  10. ECNUOJ 2143 端午节快乐

    端午节快乐 Time Limit:1000MS Memory Limit:65536KBTotal Submit:1720 Accepted:868 Description  有一段有趣的传说.公元前 ...