报错:*** buffer overflow detected ***:
将ubuntu 9.04自带的gcc-4.3.2替换成gcc-4.1.0。
出现这个报错的背景很多,但根本是gcc版本过高或者过低,使用gcc-4.1即可解决这个问题。
gcc-4.1安装办法(转载自http://www.cnblogs.com/njucslzh/archive/2010/06/04/1751703.html)
由于学习的原因,需要用到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问题解决了。