在网上,编译GCC的方法有很多,大部份人都推荐在CYGWIN环境下进行交叉编译,这样可以可以少遇到许多困难,但是使用CYGWIN时往往需要编译许多其它相关工具才行,对于我这个懒人来说,真是不太现实,所以我开始了我用MINGW编译之旅。 在国外似乎很早就有人开始用MINGW尝试编译GCC了,不过如你根据它的方法的话,依我试验后的经验不一定能够成功的编译出来,因为有许多提前工作,在那文档中并没有列出。下面将以GCC4.2.2为例进行 前期准备工作: 一、准备一个已编译好的GCC,我用的是TDM的GCC4.2.1(当然用它的GCC4.2.2也可以) 二、安装MSYS和它的工具包,在MSYS安装完成以后,一般会要求指定一下你的GCC安装路径,按要求填写即可,万一你想改变了你可以在MSYS文件夹中的 /etc/fstab下进行修改。最后要说的是你可能需要从MINGW的官网上下载最新MAKE和MAKEINFO这个两个程序,后面我将会给出为什么需要它们的原因 三、安装mingw-core、mingw-win32api、mingw-binutil 四、编译GMP与MPFR,根据测试GMP虽然有了4.2.2版本,但是在WIN环境下无法通过编译(有高人帮我解决更好了),但是GMP4.2.1依然可以编译使用,为编译 GCC4.2.2所以MPFR必需要求使用MPFR4.2.2,在msys环境下,老惯例的三步走configre,make,make install就可以了,将编译好的相关文件复制到GCC的文件夹中,当然你可以在GCC编译时另外指定路径,不过会变得麻烦些 五、安装GNUWIN32组件 bison into http://gnuwin32.sourceforge.net/down…on-bin-zip.php http://gnuwin32.sourceforge.net/down…on-dep-zip.php

flex http://gnuwin32.sourceforge.net/down…ex-bin-zip.php

libtool http://gnuwin32.sourceforge.net/down…ol-bin-zip.php

libiconv http://gnuwin32.sourceforge.net/down…nv-bin-zip.php http://gnuwin32.sourceforge.net/down…nv-dep-zip.php

下一步编译:

其实正常来说这一步可以忽略不说,但是我就是不理解为什么在WIN环境下会变得如此的复杂?

下面是我的configure执行脚本

#!/bin/sh PATH=/f/GCC/bin:/f/msys/1.0/bin:$PATH ../../configure –prefix=/mingw –enable-languages=c,c++,fortran,objc,obj-c++,treelang,java –disable-nls –disable-werror –disable-win32-registry –enable-sjlj-exceptions –enable-threads=win32 –disable-libstdcxx-pch –enable-fully-dynamic-string –enable-libgomp –with-tune=generic –with-as=/mingw/bin/as.exe –with-ld=/mingw/bin/ld.exe –with-gcc –with-gnu-ld –with-gnu-as

注意–with-as=/mingw/bin/as.exe –with-ld=/mingw/bin/ld.exe 这两句是必须要的,否则在编译可能出现无法生成a.exe文件的错误,根据网上得出的资料是MSYS在文件映射方面,最好是使用UNIX下面的路径方式,如果使用DOS的路径方式很容易出现一些陌名的错误。还有如果你要编译GCC的大部份编译器,最好还是按照我上面的来写–enable-languages=c,c++,fortran,objc,obj-c++,treelang,java,因为有时候GCC配置无法正常识别你要编译的语言种类,另外GNAT自gcc4.2.0开始,我就一直没有成功过,一直提示缺少calander文件。

接着是make,心跳吧,在我的编译历程中,这里是最容易出现各种各样奇怪的错误的,一般来说有两个方面,一个是上述配置没有做好,存在一定问题,另一个就是编译用的源文件出现问题,我发现如果你使用WINRAR来解压GCC4.2.2的源文件时,会有一个长文件名的.h文件解压后文件名出错,导致无法编译通过,我推荐使用7-ZIP,这个在多次使用过程中没有出现任何问题。

最后一步是make install,很不幸的说,这里会存在一个问题,有时你会发现你安装一半会提示你,需要安装makeinfo和最新的make应用程序,如果你仔细观察一下你会发现GCC的CONFIGURE里面使用的是 missing makeinfo当然是不对的了,还好MINGW上已经提供了最的MSYS用MAKE和MAKEINFO,下载覆盖,然后修改GCC源文件根目录下的MAKEFILE和子文件夹GCC下的MAKEFILE,把里面的missing makeinfo替换为目录下的makeinfo就可以解决,同时不要使用mingw32-make那个程序,那个虽然是同MINGW GCC在一起,但是无法在MSYS中使用,否则会出现调用文件目录的错误,好了到了这一步,GCC4.2.2的编译全过程就结束了,希望大家用得愉快