交叉编译器

交叉编译详解 在嵌入式开发中,经常会提到交叉编译,那么什么是交叉编译?和我们本地编译有什么区别呢?怎么使用交叉编译工具呢?在问题之前,我们先简单说明下编译,用本地编译来对比说明。在程序开发中,使用高级语言编写的代码被称为源代码,比如用C语言编写的后缀名为.c的文件,或者C++编写的后缀名为.cpp的文件。源代码不能被机器执行,必须转换成二进制的机器代码(指令+数据)才能被CPU执行。将源代码转换成机器代码的过程称为编译(Compile),编译的工作需要编译器(Complier)来完成。编译器对源代码进行语法检查,只有没有 阅读详情


 
OpenARM-CrossCompile-HOWTO

一、版权说明
目的:
本版权声明的目的是希望保证任何人能够真实、有效地享有使用本版权说明所约束的
文档的充分自由;同时,保护文档原作者的权利,不仅使他们得到应得的荣誉,而且
保证原作者不对因其他人的改动而导致的后果负任何责任。

声明:
a、除非另外声明,文档的版权是属于其作者的。本计划所有文档作者保留所有权利。

b、由本计划所生成的自由文档允许每个人自由的使用(包括对本文档进行各种商业性
的或是非商业性的复制和再分发),而无须向 OPENARM 计划或作者支付任何费用,条
件是本版权声明出现在所有的副本中,并且,自由文档版权声明神圣不可侵犯,使用者
不得对声明中的任何条款作任何形式的修改,也不得附加任何其它的条件。

c、允许任何人在遵循本版权声明的前提下对自由文档进行修订后再复制和发布。如果
您修订了自由文档或者发布了修订版本的副本,您就不再是一般意义上的使用者而成为
修订人,这些规定就转化为你的责任。修订人应遵循如下规定:

1。修订版应含有与上一版本具有相同内容的自由文档版权声明,但就其所修改的部分,
修订者拥有其自己的版权。
2。保护原作者以及前期版本的修订者的署名权。修订者应在修订版本中保留原作者以及
前期修订者的姓名及联系方式
3。专门建立并保留一部分内容名为“历史纪录”,针对每一版本的修订,记录该版本
的作者,修订时间,联系方式及发布者等相关信息
4。修订者有告诉读者如何获得上一版本文档的义务,如果是在网站上发布,应做出指
向上一版本文档位置的链接

d、任何人可以引用本文档中的一部分内容,或是将一部分本文档内容与其他文档内容
混合在一起使用,条件是必须在引用的文档部分中加入本版权声明。对上述行为可依
照 c 项规定办理

e、转译。如果需要根据本计划中文档转译为其它种语言,此种行为将被视同为对修订
版本的再次修订,可依照 c 项规定办理。

f、在任何情况下,原作者不承担因使用本文档而导致的对任何当事人所造成的直接的,
间接的,特殊的,附加的或者相伴而生的损坏,包括利益损失的责任,即使原作者在文
档中已经建议了这些损失的可能性时也是如此。

二、什么是交叉编译
什么是交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓
平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结
构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说
的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是
Intel x86体系结构和Windows NT for x86操作系统的简称。

一个经常会被问到的问题就是,“既然我们已经有了主机编译器,那为什么还要交叉编译呢?”其实答案很简
单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器
的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没
有建立,连操作系统都没有,根本谈不上运行什么编译器。

另一个经常会被问到的问题就是:“既然可以交叉编译,那还要主机编译干吗?”其实答案也很简单,交叉编
译是不得已而为之!与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编
译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举
例来说,我们至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为
HPPA-HPUX的交叉编译。

就我们这个项目而言,需要交叉编译的原因有两个:首先,在项目的起始阶段,目的平台尚未建立,因此需
要做交叉编译,以生成我们所需要的bootloader(启动引导代码)以及操作系统核心;其次,当目的平台能
启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。

三、交叉编译的基础知识
在做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是理解一些我们经
常会碰到的英文单词;)

host 主机平台。
target 目的平台。
perfix 交叉编译器的安装位置。
xxx-xxxx-xxxxx 平台描述。

我们在主机平台上开发程序,并在这个平台上运行交叉编译器,编译我们的程序;而由交叉编译器生
成的程序将在目的平台上运行。这里值得说明得是平台描述,象arm-linux、i386-pc-linux2.4.3这样的字
符串我们经常会看到,其实它是用来描述平台的,它有完整格式、缩减格式和别名之分。完整格式是:
CPU-制造厂商-操作系统,如sparc-sun-sunos4.1.4,说明平台所使用的CPU是sparc,制造厂商是sun,上面
运行的操作系统是SunOS,版本是4.1.4。当然,我们都不愿记这么长的东西,因此可以使用短格式,短格式
中有选择地去处了制造厂商、软件版本等信息,因此我们同样可以用sparc-sunos或sparc-sunos-sunos4来
描述这个平台。如果觉得这个还是太麻烦,那就可以使用别名,sun4m就可以很简单地描述这个平台。需要
注意的是,并不是所有的平台都有别名,也不是所有的短格式都可以正确地描述平台。

四、我需要准备些什么
怎么说呢,你先得准备好主机平台,对我们这个项目来说,我们建议采用x86 Linux做主机平台,因为这样需
要的设置工作最少。当然你也可以使用你所喜欢的平台或你所能得到的平台,其中的区别在于你可能必须做
更多的设置工作,当然也有这种可能,就是你所选择的主机平台根本不能生成适用于目标平台的正确的交叉
编译器。

对于交叉编译器,可以自己生成,也可以从网上下载。区别在于从网上下载非常简单方便,但也许你找不到
适合你所选择的平台的。而自己生成交叉编译器,有时会遇到很多挫折,但这的确是个有趣的值得怀念的经
历。

如果你想自己生成交叉编译器,那你必须先准备下面这些东西

1、磁盘空间。至少要500M左右的空间,如果想一气呵成的话,那就要900M-1G的空间。
2、各种源代码。你至少要准备binutils-2.11.2、gcc-2.95.3、linux-2.4.6、newlib-1.8.2或glibc-2.2.2
的源代码。

如果你所使用的主机平台不是运行的linux,那你还必须注意以下这些问题

1、GNU bash必须是默认shell,所以你也许得把/bin/sh改成bash。
2、你要确认已经安装了GNU bison,因为这些软经同样使用了bison扩展。
3、GNU gmake最好是系统默认得make,因为这些软件都使用了gmake扩展,如果不是,在需要make时,记得
使用gmake。
4、如果你想生成交叉glibc,则GNU gsed必须是默认sed,因为glibc会用到gsed的扩展。
5、如果你想生成交叉glibc,那还必须准备glibc-linuxthreads-2.2.2的源代码。
6、确认正确的路径搜索顺序,最好让GNU软件首先被执行。

五、怎样生成交叉编译器
我们建议使用现成的脚本来生成交叉编译器,因为在配置交叉编译器时,会经常使用一些难以理解的开关项。

待续。。。。。。

六、参考文献
http://www.objsw.com/CrossGCC/ 这是一个老牌的交叉编译FAQ,可惜最近已经很少更新了。
http://crossgcc.billgatliff.com/ 这是一个新生的交叉编译FAQ,目前更新比较频繁。
crossgcc@sourceware.cygnus.com 交叉编译器的邮件列表。

 

交叉编译(超详细) 交叉编译 阅读详情

相关推荐

buildroot编译交叉编译器

虚拟机:VMware Player Linux开发环境:centos6.7 开发板:fl2440(s3c2440处理器) 一:Buildroot:         buildroot是一组makefile和补丁,可简化并且自动化构建嵌入式系统环境的过程,也就是可以用它来制作交叉编译器、根文件系统,把u-boot、linux kernel集成到buildroot中一起编译。 二、软件准

Ethan的博客 2465

cc1: error: unrecognized command line option "-m64"

我们在交叉编译的时候可能会遇到下面两个问题, 1、 cc1: error: unrecognized command line option "-m64" cc1: error: unrecognized command line option "-mno-red-zone" cc1: error: unrecognized command line option "-mcmode

bestboyxie的专栏 1万+

使用buildroot制作交叉编译器

虚拟机:VMware Player linux开发环境:centos6.8 开发板:fl2440(s3c2440处理器) 一:了解Buildroot:         buildroot是一组makefile和补丁,可简化并且自动化构建嵌入式系统环境的过程,也就是可以用它来制作交叉编译器、根文件系统,把u-boot、linux kernel集成到buildroot中一起编译。

Sticklon的博客 2825

交叉编译OpenCV与OpenCV_contrib到ARM的经验分享

继上次完成NumCpp的移植之后,这些我们来进行OpenCV与OpenCV_contrib的移植。

where_are_u的博客 1261

buildroot制作交叉编译器

目录 交叉编译 制作方法 制作方法及遇到的问题的解决方法 下载相应包 安装buildroot相关配置 buildroot相关配置 Build options配置 Toolchain配置 保存配置 安装 检验 FL2440校验 OK制作成功! 交叉编译   在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。   交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需

Tian Jincheng's Blog 3944

arm交叉编译器简单介绍

交叉编译器命名规则:交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)

onlyshi的专栏 6298

交叉编译、gcc编译与Makefile

本文是基于卫东山的Linux应用开发基础知识中的学习笔记,如有疑问可以查找官方资料文档。

weixin_46545987的博客 4823

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

交叉编译器的安装

交叉编译器的概念 交叉编译器也叫做交叉编译工具链(cross compilation tool chain),是在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,比如在PC平台(X86 CPU)上 编译 出能运行在以ARM为内核的CPU平台上的程序, 编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。 使用交叉编译器的原因 ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使

荻夜的博客 4276

【Java微服务-医疗管理项目】(附源码+资料+教程)

尚医疗是专门为各大医院、门诊提供的一款医疗管理平台。 系统包含:系统管理、药品进销存管理、看病就诊、收费管理、检查管理、数据统计等核心模块。 通过尚医疗系统可以快速、方便的管理病人从挂号到门诊结束所涉及到的全套流程。也可以清晰明了的体现出药品进货、出售的所有记录。.........

m0_72882572的博客 2204

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 254

交叉编译器详解

1.什么是交叉编译器 嵌入式开发一般都是在x86平台下开发,而编译出来的软件要在arm平台上跑,所以需要交叉编译器,交叉的意思就是在一个架构上编译出另一个架构的代码。arm平台一般资源有限,不适合做开发 交叉编译器安装方式 以Linaro gcc为例子: 1.sudo apt-get install gcc-arm-linux-gnueabihf 2.官网下载:https://releases.l...

qq_27182175的博客 2197

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

一篇让你弄懂交叉编译器的制作教程

1.准备交叉编译器的源码包 1.1上传源码包到opt目录下,下载链接地址郭工 ftp://iot-yun.zicp.net/linux_tools/ 1.2修改/opt目录权限 leiyuxing@centos6 桌面]$ cd [leiyuxing@centos6 ~]$ sudo chmod 777 /opt/ [leiyuxing@centos6

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 3758

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1500

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1794

linux的驱动开发——交叉编译器

1.交叉编译器 \qquadARM裸机、Uboot移植、linux移植这些都需要在linux系统上进行编译,编译就需要编译器。在linux系统中,可以使用gcc命令对c语言程序进行编译,但gcc编译器是针对X86架构的,现在需要对ARM架构的代码进行编译。所以我们现在需要一个可以对ARM架构的代码进行编译的gcc编译器,这个编译器被称为交叉编译器。 \qquad交叉编译器具有如下的特点: \qquad(1)是一个gcc编译器 \qquad(2)运行在X86架构上 \qquad(3)可以编译ARM架构的代码,

zxr916的博客 2517

详细指南:如何在TI C2000基于C28x的微控制器上部署FreeRTOS_C语言实现

FreeRTOS是一个小型、开源、实时的嵌入式操作系统内核。它为多种微控制器和处理器提供了支持,包括ARM、AVR、MSP430和PIC等。小型和轻量级:适合资源受限的嵌入式系统。实时性:可以满足严格的实时要求。多任务支持:支持多任务并发执行。内存管理:提供了多种内存管理策略。模块化设计:用户可以根据需要选择所需的功能模块。TI C2000系列微控制器是专为实时控制应用设计的。高性能C28x核:提供了高速的浮点运算能力。丰富的外设:包括PWM、ADC、DAC、通信接口等。低功耗。

qq_38334677的博客 1607

如何构建GCC交叉编译器

如何构建GCC交叉编译器 GCC不仅仅是一个编译器。它是一个开源项目,可以让你构建各种编译器。有些编译器支持多线程;一些支持共享库;一些支持multilib。这完全取决于在构建编译器之前如何配置它。 本指南将演示如何构建交叉编译器,交叉编译器是为另一台机器构建程序的编译器。您所需要的只是一个类unix环境,其中已经安装了GCC的最新版本。 在本指南中,我将使用Debian Linux为AGARC64构建一个完整的C++交叉编译器,这是一个64位的指令集,可在最新的ARM处理器中使用。我实际上没有AArch

chocolate2018的博客 6241

GPU 资源池化云平台解决方案​

定义与特点Kubernetes是一个开源的容器编排和管理平台,通过提供自动化和声明式的方式来部署、扩展、维护和运行应用程序。它支持跨多个主机和集群部署容器,确保应用程序的高可用性和可扩展性。Kubernetes提供了丰富的功能和插件,允许用户根据自己的需求进行定制和扩展。架构与组件控制平面(Control Plane):负责集群的决策(如调度)和集群状态的检测与响应。

ZhangJiqun&191cm&85kg 1164

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

交叉编译器和Makefile

嵌入式开发一般都是在x86平台下开发,而编译出来的软件要在arm平台上跑,所以需要交叉编译器,交叉的意思就是在一个架构上编译出另一个架构的代码。arm平台一般资源有限,不适合做开发。

qq_46064962的博客 2121

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Freestanding C与交叉编译器的生成原理分析

0 问题由来以前也用过C51写过简单的裸机程序,但是并没有认真的考虑过其与Linux环境下一般C语言程序的不同,只是想当然地认为C是跨平台的语言,并没有考虑过C语言的标准问题。今天在编译GCC交叉编译器时,遇到了种种问题,不得不重新考虑C语言的实现标准,否则很难清晰的了解交叉编译器的编译过程。1 C编译器的两种实现要求C语言标准的正式文档中明确提出了C编译器的两种实现标准:1.1 conformin

smstong的成长轨迹 5645

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GCC交叉编译器的制作

本文所举的实例是在Cygwin环境下制作带uclibc库的arm交叉编译器。1.下载所需文件以下是我在Cygwin环境下制作arm-gcc(uclibc)交叉编译器中所需要的文件:binutils-2.14.90.0.8uClibc-0.9.27gcc-3.4.2linux-libc-headers-2.4.29PS:一般来说这里还需要下一些patch,因为我对编译器的理解还不够,加上这个事情是工

htao9911的专栏 1641

嵌入式Linux交叉编译器使用详解

lsj

难波儿万的博客 1903

交叉编译器制作流程

由于项目的需要,我们需要一个能在x86平台上运行,生成mips应用程序的交叉编译器,最近几天一直在搞这个,看了很多的文章也试了不少的方法,最后终于成功了,还不错,有些新的和大家交流一下。  什么是交叉编译器?     为什么叫“交叉编译器”(cross compiler),就是因为它跨平台来编译程序!

秋枫林的专栏 1万+
上一篇: 显示行数
下一篇: 文献标志码
raphaelxia
博客等级 码龄22年 6粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值