第五章加载内核用系统自带的gcc编译链接发现,无法实现书上的内容,如下图
怀疑是系统自带的gcc版本太高导致,书中用到的gcc版本很低gcc4,而系统的gcc是12,如下图最后一行:
所以需要gcc降级,上网找各种资料,花费了N个小时都没搞定,有离线安装gcc4.4\gcc4.5\gcc4.7结果报各种莫名错误。
最后安装gcc4.9试最后一次:
- 下载地址:
https://mirrors.kernel.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.gz
2、将压缩包拷到linux,并解压
tar -zxvf gcc-4.9.0.tar.gz
3、下载编译所需依赖项
cd gcc-4.9.0
./contrib/download_prerequisites
- 然后配置
./configure --prefix=/usr/local/gcc-4.9.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++
5、再编译
make
等待很长时间,半个小时到2个小时不等,结果出现这个错误,崩溃啊!如下图:
上网查原因找到:该错误是由于某些语法在 c++17 标准中不在允许,而 gcc 11.3 版本默认好像是用的 C++17 标准。
说明系统自带的c++编译器版本太新了
解决方案:装一个老一点的 gcc
我这个系统默认的gcc版本是12,这个版本太新了,古老版本的代码有很多在 C++17 里都不支持。就安装一个比较老的gcc,比如Ubuntu18.04自带的7.5.0版本(先试下)但是,gcc7.5.0在系统上不能直接sudo apt install,手动装会比较麻烦,如果你不想这么麻烦,可以装一些Ubuntu20.04支持的老gcc版本试试)
1>#下载 gcc 7.5.0 的源代码,解压
下载地址:http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz
tar -zxvf gcc-7.5.0.tar.gz
- 同样如上面配置
cd gcc-7.5.0
./contrib/download_prerequisites
./configure --prefix=/usr/local/gcc-7.5.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++
- 编译
make
这次make很长时间,有2个多小时了,又出现各种错误,简直要崩溃了:
问题没解决,一个一个出现,让人很崩溃:我的系统是fedora自带的gcc是gcc12版本,编译书中第五章内容需要gcc4的版本才行,需要进行gcc降级,直接下载gcc4安装会有各种无法解决的错误,所以先将系统gcc12降级到gcc7.5,再降级到gcc4:也就是gcc12->gcc7.5->gcc4降级两次,毕竟书很老了,跟不上现在的系统了,建议作者如果有时间,可以出个最新版,否则这样花很多时间找bug会搞死人的)
结果gcc7.5make也会出现很多问题,耗时两天都在一个个解决,可惜解决不了,因为后来make一次花了4个小时甚至更长时间
最后搞得很崩溃,于是直接下载ubuntu14安装,因为这个版本系统自带的是gcc4.8
成功执行: