您的位置:首页 > 其它

交叉编译

2014-01-12 08:37 197 查看
转自 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-x 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-x 1
user users 5536 2010-03-16 12:01 hello
把编译生成的hello文件拷贝的U盘上,然后插入到MP800H上,telnet上去运行一下,Bingo! 打印出Hello, world!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: