交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。
这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。
有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代 码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过 程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太 可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力 很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:
1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。
例子:
1.2 搭建交叉编译环境
1.2.1 实验环境
交叉编译工具:arm-linux- 4.2.2
编译平台:Ubuntu10.10
开发板类型:UT-S3C6410
1.2.2 搭建步骤
1) 在/usr/local/下建立交叉编译器的安装目录arm:
sudo mkdir /usr/local/arm
2)将下载的交叉编译器包解压到/usr/local/arm目录下:
sudo tar jxvf cross-4.2.2-eabi.tar.bz2 -C /usr/local/arm/
3)解压成功后,修改PATH环境变量:
sudo vim /etc/profile
在文件为加入交叉编译器arm-linux-所在的路径:
export PATH=$PATH:/usr/local/arm/4.2.2-eabi/usr/bin
然后退出vim。
4) 更新一下配置文件/etc/profile:
source /etc/profile
5)检测是否安装成功:
现在就可以使用交叉编译器了,写一个测试程序helloworld,交叉编译下,看是否能在开发板上运行。
i. 交叉编译测试程序
arm-linux-gcc helloworld.c -o helloworld
ii.把生成的可执行文件helloworld复制到NFS的挂载目录下:
sudo cp ./helloworld /nfsboot
注意:本实验中开发板使用NFS挂载rootfs,nfsboot是NFS的挂载目录。
iii.在超级终端上运行:
./helloworld
执行结果:
相关推荐
飞腾交叉编译环境搭建之交叉编译工具链配置 飞腾交叉编译环境搭建是指在不同的操作系统平台上,使用飞腾提供的交叉编译工具链来实现跨平台编译的过程。该过程需要配置交叉编译工具链,以便在不同的平台上实现编译。...
ARM64下QT需要用到QWebEngine模块,网上很多资源交叉编译QT时,均默认跳过此步骤,没跳过此步骤的很多未能详细提供交叉编译webengine模块所依赖的库,导致此模块无法交叉编译通过,资源中包含了arm64下交叉编译的...
libwebsockets 的交叉编译 libwebsockets 库是一个开源的 websocket 组件,源码是用 C 语言编写的,组件中是通过 cmake 脚本来生成 makefile 脚本,再通过 make 来编译出目标文件。为了在 ubuntu 平台下交叉编译出...
Linux交叉编译工具链的创建和使用 在本文中,我们将详细介绍如何创建Linux交叉编译工具链,及其在移植Linux系统中的应用。交叉编译工具链是将Linux移植到其他架构平台的关键组件,它允许开发者在一种架构上编译可在...
Ubuntu 上建立 Samba 服务器以及交叉编译环境配置 在这篇文章中,我们将讨论如何在 Ubuntu 上建立 Samba 服务器,并配置交叉编译环境。本文将详细介绍建立 Samba 服务器的步骤,以及配置交叉编译环境的过程。 一、...
Nginx交叉编译与部署 Nginx交叉编译与部署是指在不同架构的平台上编译和部署Nginx服务器的过程。本文将介绍基于海思3559A对Nginx-1.6.2和OpenSSL-1.0.2的交叉编译过程,并介绍Nginx-1.6.2的环境部署。 一、概述 ...
在嵌入式设备或资源有限的系统中,有时我们需要对rsyslog进行交叉编译,以便在目标平台上运行。交叉编译是将软件在一个平台上编译,然后在另一个平台上运行的过程,这在开发嵌入式系统时非常常见。 交叉编译的核心...
标题 "srs海思3531d交叉编译.7z" 提示我们这是一个关于SRS(Simple Realtime Stream)在海思3531D芯片上进行交叉编译的资源包。SRS是一个开源的实时流媒体服务器,而海思3531D是一款由华为海思半导体公司设计的高...
### VLC 2.2.6 在 Ubuntu 16.04 上的交叉编译 #### 知识点一:交叉编译概述 - **定义**:交叉编译是指在一个平台上编译程序,使得该程序可以在另一个不同的平台上运行。通常涉及不同架构的操作系统,例如在Linux上...
### CMake 交叉编译配置详解 #### 一、引言 CMake 是一个非常流行的构建系统,广泛应用于跨平台的软件开发项目中。对于那些需要进行交叉编译的项目而言,CMake 提供了一套灵活且强大的配置机制来支持这一需求。本文...
总之,MIPS平台上的GStreamer交叉编译涉及多个步骤,包括准备交叉编译工具链,交叉编译依赖库,配置并编译GStreamer,以及最后的测试与调试。这个过程需要对嵌入式系统、编译原理和GStreamer框架有深入的理解。通过...
在本文档中,我们将深入探讨如何在CentOS 7环境下为aarch64(也称为arm64)架构安装交叉编译工具,并使用这些工具交叉编译iperf3.1.3版本。iperf3是一个网络性能测试工具,用于测量TCP和UDP的带宽以及延迟性能。 ...
rk交叉编译工具
这时,我们就需要用到Android NDK(Native Development Kit)进行交叉编译,将Python编译为适用于Android ARM架构的二进制代码。本文将详细讲解如何在Android ARM平台上使用NDK工具进行Python的交叉编译。 首先,...
在探讨Ubuntu交叉编译环境与内核编译之前,首先要明白为什么要进行交叉编译和内核编译。交叉编译主要是为了在一种平台上生成另一种平台上的可执行代码,这在嵌入式系统开发中尤为常见,比如我们需要在x86架构的...
本文将深入探讨如何在ARM架构上进行paho.mqtt的交叉编译,以便在嵌入式系统中使用。 首先,我们要了解`paho.mqtt`。Paho是IBM和OSLC发起的一个开源项目,提供了一系列客户端库,用于在多种编程语言中实现MQTT协议。...
Linux 平台下 Eclipse 配置交叉编译环境 Linux 是一个开源的操作系统,广泛应用于嵌入式系统开发中。Eclipse 是一个集成开发环境(IDE),广泛应用于软件开发中。配置交叉编译环境是为了在 Linux 平台下使用 ...
### Apache-2.4.2交叉编译知识点详解 #### 一、源码下载与准备工作 **源码下载**: - 首先,需要访问Apache官网获取最新的Apache-2.4.2源码。 - 为了提高下载速度,推荐选择国内镜像站点进行下载。 **工作环境设置...
海思 Qt5.9.7 交叉编译 Hisi3536 海思 Qt5.9.7 交叉编译 Hisi3536 是一种高级的交叉编译技术,用于将 Qt 5.9.7 移植到 Hisi3536 板子上。本文档将详细记录整个移植过程,并提供相关的知识点。 海思 Qt5.9.7 交叉...