交叉编译
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!
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!
相关文章推荐
- 菜根谭#49
- vector
- Java 7之传统I/O - 字符接口 Reader和Writer
- CRS 诊断数据收集:常见工具及其用法摘要 (Doc ID 1526158.1)
- 重启机器javascript
- 黑马程序员学习笔记IO知识简介
- 未分类--Windows API--VariantClear
- 未分类--Windows API--VariantInit
- nc的应用
- 代码复用应该这样做(3)
- UVa 118 Mutant Flatworld Explorers (模拟机器人移动)
- 森纵培训第三天课程总结
- Exchange邮箱存储高可用
- 森纵培训第一天课程总结
- 森纵培训第十天课程总结
- 内在美,真的美
- 如何学好一门语言
- (转载)Java 推荐读物与源代码阅读
- 好想找个女朋友
- exchange2010配置pop邮箱发送邮件出现报错550 5.7.1