现在的位置: 首页 > 综合 > 正文

buffer overflow detected问题解决及gcc-4.1安装

2014年02月22日 ⁄ 综合 ⁄ 共 2585字 ⁄ 字号 评论关闭

报错:***
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 

g++-4.1_4.1.2-27ubuntu1_i386.deb

gcc-4.1_4.1.2-27ubuntu1_i386.deb

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

libstdc++6-4.1-dev_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问题解决了。

抱歉!评论已关闭.