admin管理员组

文章数量:1566993

2024年6月6日发(作者:)

建立交叉编译环境

交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的

CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同

的CPU对应语言。

交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,

binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm-linux-gcc

交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。

自行搭建交叉编译环境通常比较复杂,而且很容易出错。可以使用厂家提供的交叉编译器,

只需将交叉编译器解压到根目录下即可(厂家已经做好这步)。

步骤:

设置系统环境变量:

在linux shell终端输入如下命令

export PATH=$PATH:/usr/local/arm/arm-2009q3/bin/

这样,内核或其他应用程序均可以用arm-none-linux-gnueabi-来指定使用该交叉编译器。

自行编写一个程序测试:

示例helloworld.c:

#include

int main(void)

{

printf("hello worldn");

return 0;

}

然后在命令行执行如下语句开始编译:

$ arm-none-linux-gnueabi-gcc helloworld.c -o helloarm

用file命令查看下生成的helloworld程序的格式:

$ file helloarm

如果输出以下信息,说明编译成功。

helloworld: ELF 32-bit LSB executeable, ARM, version 1, dynamically linked (uses shared libs),

not stripped

注:

如果使用如下的命令来编译该文件。

[root@localhost root]# gcc –o hello helloworld.c

[root@localhost root]# file hello

helloworld: ELF 32-bit LSB executeable, Intel 80386, version 1, dynamically

linked (uses shared libs), not stripped

可发现是80386格式,可以在虚拟机中直接./hello运行

而用arm-none-linux-gnueabi-gcc编译的helloarm程序,是无法在虚拟机里用./helloarm执行

的,但可以在ARM开发板中运行。

本文标签: 交叉编译编译器生成使用