zelsazgh

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  2 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks

常用链接

留言簿(15)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

在网上,编译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的编译全过程就结束了,希望大家用得愉快


posted on 2007-12-15 10:03 Loki.RF 阅读(6852) 评论(9)  编辑 收藏 引用

Feedback

# re: 用MINGW编译GCC4.2.2指南 2007-12-17 10:01 崔友志
学习  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南 2007-12-18 21:17 秦歌
学习学习  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南[未登录] 2009-05-04 15:06 Loaden
我编译GMP4.3成功了,不过编译mpfr出现错误。  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南[未登录] 2009-05-04 20:08 Loaden
mpfr也编译成功了,正准备编译gcc  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南 2009-05-11 10:18 test
编译GMP成功并make install后,再编译MPFR,提示找不到gpm.h文件
后来将Msys安装目录下的/local/include和/local/lib目录拷贝到MinGW安装目录下的相关目录,即解决问题。编译好MPFR,还是要将相应文件拷贝到MinGW得安装目录下才能编译GCC,请教博主这个问题该怎么解决?在Msys中怎么设置才能避免手动拷贝文件?

我没有安装GNUWIN32组件,编译gcc也行的  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南 2009-05-14 05:35 zelsazgh
@test
编译时增加prefix参数,指定安装路径即可  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南[未登录] 2009-05-14 10:14 Loaden
博主你好!我只想编译c/c++,使用make 及make install应该不行。
于是我使用:
make all-gcc all-target-libstdc++-v3 all-target-libssp all-target-libgcc && make install-gcc install-target-libstdc++-v3 install-target-libssp install-target-libgcc

上面是通过configure之后的makefile文件自己判断的。
虽然我能编译成功,但总出现crt2.o找不到的问题。

另,我已经编译MinGW好几天了,有一些体会,但也有不少疑惑,想与博主QQ交流:1090833,能否加我QQ聊?  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南[未登录] 2009-05-14 10:16 Loaden
一个非常奇怪的问题:我编译binutils成功,但make check总失败。
不知为何。  回复  更多评论
  

# re: 用MINGW编译GCC4.2.2指南 2014-05-28 21:01 comet
运行的程序放到哪个文件夹下?  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理