QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4674|回复: 1

在cygwin环境下创建用于ARM平台的交叉编译工具

[复制链接]
发表于 2004-4-14 14:45:05 | 显示全部楼层 |阅读模式
在编译前需要下载的源代码:
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
发表于 2004-5-13 22:25:57 | 显示全部楼层
非常好,谢谢了netwind2000。

斑竹,要求加精。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-21 22:59 , Processed in 0.111054 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表