黄聪

论SEO对人类的重要性,请看我的博客:hcsem.com

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

报错:*** 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问题解决了。
 
posted on 2011-11-06 12:14  黄聪  阅读(2670)  评论(2编辑  收藏  举报