|
在编译前需要下载的源代码:
binutils http://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.bz2
或者下载cygwin专用的binutils
http://planetmirror.net/pub/cygwin/release/binutils/binutils-20040312-1-src.tar.bz2
gcc core http://planetmirror.net/pub/cygwin/release/gcc/gcc-core/gcc-core-3.3.1-3-src.tar.bz2
gcc c++ http://planetmirror.net/pub/cygwin/release/gcc/gcc-g++/gcc-g++-3.3.1-3-src.tar.bz2
newlib ftp://sources.redhat.com/pub/newlib/newlib-1.12.0.tar.gz
1. 首先安装cygwin环境( http://www.cygwin.com )
2. 启动cygwin
3. 解压binutils源代码(可以在windows环境下用winrar解压,或者在cygwin环境下用bunzip2和tar来解压)
4. 在cygwin环境下进入binutils解压生成的目录,使用./configure --target=arm-linux-elf --prefix=(你想安装的目录) 来配置源代码.
5. 配置完成后,在同一目录下运行make all install.等运行完毕后,binutils的工具就会安装到你在--prefix=里面指定的目录下面了.
6. 解压gcc core和gcc g++,先找到gcc-3.3.1-3.sh这个文件,然后进入这个文件所在的目录运行./gcc-3.3.1-3.sh prep,这个命令会对gcc的源代码打补丁,在后面打补丁的过程中会出现错误,这是因为我们没有ada,java,objc和gnu pascal的源代码造成的,这里我们只生成c,c++编译器,所以只要简单的按回车跳过即可.
7. 上一步完成后会生成.builds目录,进入解压生成的目录(也就是.builds目录的上一级目录),然后运行./configure --target=arm-linux-elf --prefix=(你想安装的目录,要与第4步中指定的一样) --with-gnu-as --with-gnu-ld
--enable-languages=c,c++ --with-newlib --without-headers --disable-shared
8. 进入.builds目录,运行make all install,等一段时间后就会编译并安装好gcc
9. 解压newlib,然后进入解压后的目录,运行./configure --target=arm-linux-elf --prefix=(你想安装的目录,要与第4步中指定的一样)
10. 在newlib目录下面运行make all install,最后newlib会安装到你指定的目录下面
11. 回到gcc的.builds目录,运行./configure --target=$TARGET --prefix=$PREFIX --with-gnu-as --with-gnu-ld --disable-nls
12. 运行make all install,最后会编译并安装gcc的所有内容到你指定的目录
注意:
1. 这里使用的gcc源代码是cygwin下经过修改的,gnu网站上未经修改的源代码没有测试过.
2. 如果在11步里面出现编译错误,只要在gcc解压目录下的arm-linux-elf\libstdc++-v3\config目录里面再建立一个config目录,然后将第一层config目录下面除config目录外的所有内容复制一份到新建立的config目录下面一份就可以了. 同时对arm-linux-elf\thumb\libstdc++-v3\config目录做相同的工作.然后回到.builds目录用make all install命令继续编译.
3. 如果出现无法生成be.gmo的错误,可以在gcc-3.3.1-3\gcc\po目录下找到几个.po文件,这些是gcc的其它语言的翻译文件,因为没有中文翻译,所以根本不需要编译这些文件(配置过程中使用--disable-nls选项).但一定要编译的话,可以使用msgfmt工具手动来生成这些文件.用法 msgfmt -o be.gmo be.po,然后将生成的.gmo文件复制到.builds目录下面的gcc\po目录下面,如果po目录不存在,直接自己创建就可以,然后回到.builds目录下用make all install命令继续编译.
4. 以上所有的过程我都是在cygwin环境下完成的,生成的工具需要在cygwin环境下使用(也可以直接在dos窗口中使用,但cygwin1.dll必须在系统搜索路径当中).如果在mingw环境下应该也可以,这样可以脱离cygwin的限制,现在我还没有测试过,如果有人已经成功了,请说明一下编译步骤.还有编译的时候使用-O2 或其它的优化选项来生成文件.对于helloword程序,不使用任何优化选项时生成的文件为303K,使用-O2后只有179K.
5. 如果编译过程中出现无法找到头文件的错误,修改gcc\config\arm目录下面的t-linux文件,在TARGET_LIBGCC2_CFLAGS =后面添加inhibit_libc and __gthr_posix_h
参考网站:
http://www.utzwinter.de/Linux/cross-compiler.html |
|