• gcc-4.8.3安装,gdb-7.6安装


    gdb用法:

    http://blog.chinaunix.net/uid-26548237-id-3435525.html

    gdb-7.6.tar.gz:  (官网下载:http://ftp.gnu.org/gnu/gdb/)

    gcc-4.8.3.tar.bz2: (官网下载:https://gcc.gnu.org/)

    附:gdb之TUI: ncurses (wget http://down1.chinaunix.net/distfiles/ncurses-5.9.tar.gz)

         gdb依赖包:termcap-1.3.1.tar.gz

    gcc编译会有点繁琐些,下面说一下编译步骤:

    如果新安装的CentOS缺少编译环境,必须先安装旧版本的gcc, 然后再进行自举编译,旧版安装方法见在上面介绍过了(用yum),不再细述。

    命令:yum install gcc gcc-c++(gcc-c++不可少,不然后面编译报错)

    提醒,现在centos7.0已经发布出来了,如果你centos版本是7.0,那么yum安装的gcc/gcc-c++版本本身就已经是4.8.2了。

    1),下载并解压缩gcc 4.8.3源码包

         tar jxvf gcc-4.8.3.tar.bz2

    2), 下载编译所需的依赖包

        cd gcc-4.8.3;

         ./contrib/download_prerequisites

          你可以查看README文件,查看编译gcc需要的下载编译依赖,主要是mpfr, gmp等。从网上教程来看,gcc4.8.3版本已经写好了脚本下载这些依赖而无需再手动编译这些依赖项了。执行上面的脚本就可以下载依赖的文件。

    3, 创建新目录,并执行configure命令,产生makefile

        mkdir ../build-4.8.3
        cd ../build-4.8.3
        ../gcc-4.8.3/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --prefix= /usr/local/gcc-4.8.3/

       说明:本编译参数中使用--prefix指定了gcc的新安装目录。

    4), 编译gcc 4.8.3 
         这个过程需要很久,你可以添加-j参数进行多核心编译,提高编译速度,比如服务器是40核心的可以使用-j40做参数:

        make -j40 

    5), 安装gcc 4.8.3

       make install

    6), 更新libstdc++.so.6,更新这个库可以让程序快速搜索到这个新版本库,其实你也可以更改环境变量来完成。

      cp /<path_to>/build-4.8.3/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64

      红字部分在不同平台上有所不同
    7), 调整libstdc++.so.6的优先级,

    可以使用ln -sf链接,也可以使用alternatives,这里推荐使用alternative

    ln方法:

    ln -sf /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6

    alternatives方法

    alternatives --install  旧库全名 库名 新库全名 优先级
    alternatives --install /usr/lib64/libstdc++.so.6.0.13 libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.13 39

    alternatives --install /usr/lib64/libstdc++.so.6.0.13 libstdc++.so.6 /usr/lib64/libstdc++.so.6.0.19 40

    附:alternatives 常用参数:--install; --remove; --config; --display

    检查是否使用新版库:

    alternatives --display libstdc++.so.6
    libstdc++.so.6 - 状态是自动。
    链接目前指向 /usr/lib64/libstdc++.so.6.0.19
    /usr/lib64/libstdc++.so.6.0.13 - 优先度 39
    /usr/lib64/libstdc++.so.6.0.19 - 优先度 40
    当前“最佳”版本是 /usr/lib64/libstdc++.so.6.0.19

     
    7), 检查gcc,g++版本

    [root@localhost bin]# /usr/bin/gcc --version
    gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
    Copyright © 2010 Free Software Foundation, Inc.
    本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
    包括没有适销性和某一专用目的下的适用性担保。
    [root@localhost bin]# /usr/local/gcc-4.8.3/bin/gcc --version
    gcc (GCC) 4.8.3
    Copyright © 2013 Free Software Foundation, Inc.
    本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
    包括没有适销性和某一专用目的下的适用性担保。

    以上面的显示信息可知,gcc有两套,现在我们要使用其中新版本。
    操作命令同libstdc++.so.6,这里推荐alternatives命令,可以更简洁方便得在gcc不同版本之间做更换。
    以gcc为例:
    一种方法是用alternatives:
    alternatives --install /usr/bin/gcc  gcc /usr/bin/gcc 39
    alternatives --install /usr/bin/gcc  gcc /usr/local/gcc-4.8.3/bin/gcc 40
    检查版本:

    [root@localhost bin]# alternatives --display gcc
    gcc - 状态是手工。
    链接目前指向 /usr/local/gcc-4.8.3/bin/gcc
    /usr/local/gcc-4.8.3/bin/gcc - 优先度 40
    /usr/bin/gcc - 优先度 39
    当前“最佳”版本是 /usr/local/gcc-4.8.3/bin/gcc。

    另起窗口,检查版本:

    # g++ --version
    g++ (GCC) 4.8.3 

    8)环境变量设置
      如果你安装时使用了--prefix指定了自定义目录,这里显示的版本仍然是系统默认的老版本。你需要设置环境变量:PATH, LD_LIBRARY_PATH,将<--prefix>目录加到系统默认目录前,
    具体做法是:/etc/profile最后加:
    export PATH=/usr/local/gcc-4.8.3/bin:<.....>:$PATH;
    export LD_LIBRARY_PATH=/usr/local/gcc-4.8.3/lib:/usr/local/gcc-4.8.3/lib64
    即可。注意gcc的路径顺序,把你想要版本的Gcc路径放在前面,默认路径放在后面。
    重启系统,检查确认版本是否OK。
     
    Q&A:
    1) 使用ACE库开发的程序,有时候会提示:lib/libACE.so: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)@GLIBCXX_3.4.15'
    A: 这是因为系统的GCC版本过低引起的;而系统安装的最新版本为gcc4.8.1,这个新版本gcc需要GLIBCXX_3.4.15或更高版本。

    #>ldd /opt/ace/ACE_wrappers/lib/libACE.so

    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fdd34fd6000)

    libm.so.6 => /lib64/libm.so.6 (0x00007fdd34d51000)

    libgcc_s.so.1 => /opt/gcc/lib64/libgcc_s.so.1 (0x00007fdd34b3b000)

    libc.so.6 => /lib64/libc.so.6 (0x00007fdd347a7000)

    #>strings /usr/lib64/libstdc++.so.6.0.13 | grep GLIB

    GLIBCXX_3.4.10

    GLIBCXX_3.4.11

    GLIBCXX_3.4.12

    GLIBCXX_3.4.13

    GLIBC_2.2.5

    GLIBC_2.3

    GLIBC_2.4

    GLIBC_2.3.2

    确实没有看到GLIBCXX_3.4.15

    再观察系统lib与lib64下stdc++的文件信息发现,64位目录下的版本libstdc++.so.6.0.13,而32位目录下却是libstdc++.so.6.0.18,
    如下图:

    lrwxrwxrwx 1 root root      28 7月   8 10:16 /usr/lib/libstdc++.so.6 -> /usr/lib/libstdc++.so.6.0.18
    -rwxr-xr-x 1 root root 6472115 7月   8 10:16 /usr/lib/libstdc++.so.6.0.18
    [root@localhost SignalDistServerMC]# ll /usr/lib64/libstdc++.so.6*
    lrwxrwxrwx  1 root root      19 7月   8 12:42 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13
    -rwxr-xr-x. 1 root root  989840 11月 22 2013 /usr/lib64/libstdc++.so.6.0.13

    解决方案:

    从上面的情况分析看,是因为ACE在寻找依赖库的时候找到了/usr/lib64/libstdc++.so.6,但这个版本比较低为libstdc++.so.6.0.13版本,找不到接口所以报错。
    可以更改库的软链接,使其指向高版本库:ln -sf /usr/lib64/libstdc++.so.6 /usr/lib/libstdc++.so.6.0.18

  • 相关阅读:
    【mongoDB运维篇④】Shard 分片集群
    【Linux高频命令专题(11)】cp
    【Linux高频命令专题(10)】mv
    Nginx + Lua + 共享内存
    ngx_lua模块学习示例之waf
    在 Golang 中使用 Protobuf
    openresty package.path require 报错
    ngx_lua 模块
    Lua中的常用语句结构以及函数
    lua日期与时间操作
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/3830903.html
Copyright © 2020-2023  润新知