交叉编译

转自 http://www.cnitblog.com/gouzhuang/archive/2010/03/16/cross_compiling.html


RTD1073是基于32位MIPS指令集的,与我们常用的x86平台是不兼容的。为了能够生成在RTD1073上运行的程序,必然要用到交叉编译工具。
简单说,交叉编译就是在一个平台(编译平台/build platform)上生成另一个平台(目标平台/target platform)的执行代码。通常目标平台是一些运算能力较弱的嵌入式系统。交叉编译工具链(cross compile tool chain)是指用于交叉编译的一系列工具,主要包括C/C++编译器、函数库(libc, libstdc++等)、binutils等。C函数库libc常用的有两种:大而全的glibc(GNU C Library) 和小巧的uClibc。嵌入是系统由于受内存和flash存储空间的限制,通常都使用uClibc。
早前提到的华硕的公开源码包中提供了有两套工具链:一套用于应用程序编译,一套用于Linux内核编译,并附有安装说明。在网上搜搜还能找到其它厂商公布的源码和工具链,只要是基于RTD1073或其姊妹产品的,内核源码和工具链都是一样的,相信它们都源自Realtek。
交叉编译工具常常在命令前加一个前缀,比如上述两套工具链都使用'mipsel-linux-'的前缀。如果将两套工具链安装在一个系统里,可以通过PATH环境变量来选择所用的工具链。具体地说,用于AP(应用程序)的工具链安装在/usr/local/bin;用于内核的工具链安装在/usr/bin。要选择AP工具链就在PATH中将/usr/local/bin放在/usr/bin前面,反之亦然。
写一个hello.c程序试试看

1  #include  < stdio.h >
2  int  main( int  argc,  char *  argv[]) {
3     printf( " Hello, world!\n " );
4  }
编译
 1  $ which mipsel - linux - gcc
 2  / usr / local / bin / mipsel - linux - gcc
 3  $ mipsel - linux - gcc  - o hello hello.c
 4  $ ls  - l hello
 5  - rwxr - xr - 1 user users  7749   2010 - 03 - 16   12 : 00  hello
 6  $ file hello
 7  hello: ELF  32 - bit LSB executable, MIPS, MIPS32 version  1  (SYSV), dynamically linked (uses shared libs), not stripped
 8  $ mipsel - linux - strip hello
 9  $ file hello
10  hello: ELF  32 - bit LSB executable, MIPS, MIPS32 version  1  (SYSV), dynamically linked (uses shared libs), stripped
11  $ ls  - l hello
12  - rwxr - xr - 1 user users  5536   2010 - 03 - 16   12 : 01  hello
把编译生成的hello文件拷贝的U盘上,然后插入到MP800H上,telnet上去运行一下,Bingo! 打印出Hello, world!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值