Dive deeper and you will eventually found that..

the problem is now far beyond “and then click the ‘Compile & Run’ button.”

Compile GCC Manually

之前我在我的archlinux上做6.828的方式是,使用downgrade(AUR)gcc系的包降级,从而可以正确编译JOS kernel

但是那并不是最好的方式——在很多情况下,能够使用最新版本的编译器都会带来不少好处。

那么,为了使我们系统自带的编译器保持最新,我们需要自己编译一个较低版本的gcc

Cosidian(see friends) 自己编译了一个gcc-4.6.1,这也是6.828官网推荐的gcc版本。

但是我在编译的时候遇到了一个无法搜到的bug,遂放弃。

最后我选择了github gcc mirrorgcc-6-branch分支来进行编译。这是一个能在最新gcc下编译的分支。

接下来简述编译方法。依赖包不再详解,请自行解决编译时遇到的依赖问题。

注:需要安装lib32-glibclib32-gcc-libs,否则会导致编译出来的gcc无法连接内核。

下载后解压——

$ cd gcc-6-branch
$ mkdir build
$ ./contrib/download_prerequisites # need network connection
$ cd build
$ env MAKEINFO=missing ../configure --prefix=<path-to-your-build> --disable-werror --disable-libssp --disable-libmudflap --without-headers --enable-languages=c # --enable-multilib if lib32-glibc and lib32-gcc-libs is surely installed, or omit to let configure check
$ make -j8 # on my i7-4720hq
$ make install

然后将<path-to-your-build>/bin<path-to-your-build>/lib64分别加入PATHLD_LIBRARY_PATH即可。

Or You Can Choose the SIMPLER WAY!

更加方便的方式是,使用zhwkpkg(参见侧边栏的My Stuff)。

配置好environment-modules.modulerc之后,使用以下命令安装我编译好并打包的gcc-6-jos

$ wget "https://attach.imzhwk.com/gcc-6-jos.tar.bz2"
$ zhwkpkg deploy gcc-6-jos.tar.bz2

当需要使用时,在当前终端下输入:

$ module load gcc-6-jos

然后就会正确装载该版本的gcc。仅在此终端内有效。

(疯狂安利自己写的脚本,想不到吧?