zoukankan      html  css  js  c++  java
  • 黄聪:buffer overflow detected问题解决及gcc4.1安装

    报错:*** buffer overflow detected ***: 
    将ubuntu 9.04自带的gcc-4.3.2替换成gcc-4.1.0。


    出现这个报错的背景很多,但根本是gcc版本过高或者过低,使用gcc-4.1即可解决这个问题。

    由于学习的原因,需要用到GCC 4.1.2,而Ubuntu10.04下默认的GCC版本是GCC 4.4.1,所以需要自己安装低版本的GCC 4.1.2。通过学习,总结安装步骤如下。

    首先下载所需的文件,我下载deb包,地址http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/。根据计算机情况和需要,下载文件如下:

     

    cpp-4.1_4.1.2-27ubuntu1_i386.deb  gcc-4.1-base_4.1.2-27ubuntu1_i386.deb

    g++-4.1_4.1.2-27ubuntu1_i386.deb  libstdc++6-4.1-dev_4.1.2-27ubuntu1_i386.deb

    gcc-4.1_4.1.2-27ubuntu1_i386.deb

    安 装这些包,它们之间有依赖关系,如果顺序不对会有提示。安装命令是sudo dpkg -i XXX.deb,不用sudo不知道行不行,没试。大概顺序是第四个,第一个,第三个,第二个,第五个,但装第二,五个时互相依赖,最后采用一次输入两个 文件,让系统自己看着办,通过。其实,后来我发现可以采用傻瓜的方法,如下,完全由系统自己决定,
    sudo dpkg -i *.deb
    [sudo] password for lzh: 
    (正在读取数据库 ... 系统当前总共安装有 139940 个文件和目录。)
    正预备替换 cpp-4.1 4.1.2-27ubuntu1 (使用 cpp-4.1_4.1.2-27ubuntu1_i386.deb) ...
    正在解压缩将用于更替的包文件 cpp-4.1 ...
    正预备替换 g++-4.1 4.1.2-24ubuntu1 (使用 g++-4.1_4.1.2-27ubuntu1_i386.deb) ...
    正在解压缩将用于更替的包文件 g++-4.1 ...
    正预备替换 gcc-4.1 4.1.2-27ubuntu1 (使用 gcc-4.1_4.1.2-27ubuntu1_i386.deb) ...
    正在解压缩将用于更替的包文件 gcc-4.1 ...
    正预备替换 gcc-4.1-base 4.1.2-27ubuntu1 (使用 gcc-4.1-base_4.1.2-27ubuntu1_i386.deb) ...
    正在解压缩将用于更替的包文件 gcc-4.1-base ...
    正预备替换 libstdc++6-4.1-dev 4.1.2-27ubuntu1 (使用 libstdc++6-4.1-dev_4.1.2-27ubuntu1_i386.deb) ...
    正在解压缩将用于更替的包文件 libstdc++6-4.1-dev ...
    正在设置 gcc-4.1-base (4.1.2-27ubuntu1) ...
     
    正在设置 cpp-4.1 (4.1.2-27ubuntu1) ...
    正在处理用于 man-db 的触发器...
    正在设置 gcc-4.1 (4.1.2-27ubuntu1) ...
    正在设置 libstdc++6-4.1-dev (4.1.2-27ubuntu1) ...
    正在设置 g++-4.1 (4.1.2-27ubuntu1) ...
    这时,系统里面会有2个版本的GCC,缺省的还是原来默认的GCC 4.4.1,我们可以更改系统的默认配置。查看GCC的版本信息
    ls /usr/bin/gcc*
    /usr/bin/gcc  /usr/bin/gcc-4.1  /usr/bin/gcc-4.4  /usr/bin/gccbug-4.1
     

    可以看到,已经有了2个版本的GCC,安装成功。

     

    增加GCC 4.1.2和GCC 4.4.1可选项

     

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40

    update-alternatives: 使用 /usr/bin/gcc-4.1 来提供 /usr/bin/gcc (gcc),于 自动模式 中。
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30
    update-alternatives: 使用 /usr/bin/gcc-4.4 来提供 /usr/bin/gcc (gcc),于 自动模式 中。
     
    设置默认编译器,如下:
    sudo update-alternatives --config gcc 
    有 2 个选项可用于替换项 gcc (提供 /usr/bin/gcc)。
     
      选择       路径            优先级  状态
    ------------------------------------------------------------
    * 0            /usr/bin/gcc-4.4   40        自动模式
      1            /usr/bin/gcc-4.1   30        手动模式
      2            /usr/bin/gcc-4.4   40        手动模式
     
    要维持当前值[*]请按回车键,或者键入选择的编号:1
     
    sudo update-alternatives --config gcc 
    有 2 个选项可用于替换项 gcc (提供 /usr/bin/gcc)。
     
      选择       路径            优先级  状态
    ------------------------------------------------------------
      0            /usr/bin/gcc-4.4   40        自动模式
    * 1            /usr/bin/gcc-4.1   30        手动模式
      2            /usr/bin/gcc-4.4   40        手动模式
     
    要维持当前值[*]请按回车键,或者键入选择的编号:
     
     
     
    这样就完成了安装和默认项配置,于是可以默认使用GCC 4.1.2编译程序了。其它版本的类似。。。

    再次编译你的程序,执行时buffer overflow detected问题解决了。
     

  • 相关阅读:
    JS中数组Array的用法{转载}
    XML运用于编程
    Net下Attribute的特性简单入门(转)
    JS比较好用的一些方法搜集
    再也不用为找loading图标而发愁(转)
    jQuery AJAX实现调用页面后台方法
    ajax 错误: invalid label
    treeview TreeNodeCollection 转化为 TreeNode[]
    怎么页面初始化时执行js方法
    asp 前台js获取后台的值
  • 原文地址:https://www.cnblogs.com/huangcong/p/2237997.html
Copyright © 2011-2022 走看看