精华内容
下载资源
问答
  • 什么交叉编译

    千次阅读 2018-01-18 15:51:46
    交叉编译或许我们工作中经常会听到别人提起,那到底是什么意思呢? 如果你是使用动态语言的那么你不需要编译,只是需要安装一个解释器。 定义 代码变成可执行文件,叫做编译(compile);先编译这个,还是先...

    交叉编译或许我们工作中经常会听到别人提起,那到底是什么意思呢?

    如果你是使用动态语言的那么你不需要编译,只是需要安装一个解释器。

    定义

    代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)

    在一个机器上可以编译其他平台所用的任务,称为交叉编译。举个例子,我们使用Linux 可以直接编译出在Windows或者Mac上使用的软件。

    展开全文
  • 老是在做交叉编译,其实有时候对这三个东西的理解并不是那么清楚   从交叉工具链的情况来看,可以总结如下 --build= 谁在这里编译? 意思说你目前的编译动作在哪里跑的 ? 如果是编译一个arm工具链,虽然工具链...

    文章原地址:http://blog.chinaunix.net/uid-20634420-id-3027812.html

    老是在做交叉编译,其实有时候对这三个东西的理解并不是那么清楚

     

    从交叉工具链的情况来看,可以总结如下

    --build= 谁在这里编译? 意思说你目前的编译动作在哪里跑的 ? 如果是编译一个arm工具链,虽然工具链为为arm弄的,但是构建工具链的时候是在主机上进行的。所以 --build=i686-pc-linux-gnu

    --host= 目前编译出来的程序在哪里跑 ? 所以工具链好了之后,给目标系统编译程序全部是设置host为arm的。

    --target=为谁编译程序,这在交叉编译的时候跟host一个意思,一般是guess的,而且configure 脚本会说是 =--host.

    通常我们编译复杂的情况就是交叉编译了,据说还有一种很复杂的情况,三个平台:

    比较,我现在在 i686机器上,想编译一个在 ppc上运行的交叉工具链,然后这个交叉工具链为arm生产程序,这个就算比较复杂了。

    应该是binutils,gcc,libc的时候这个三个--要很谨慎的设置了。

    可能是

    • --build=i686-pc-linux-gnu
    • --host=ppc-xxx
    • --target=arm-xxx

    没有实验过,可以改天实验下,学习下。

    续:三平台交叉编译实验

    对binutils源码解压,配置如下:

    ../binutils-2.21.1/configure --build=i686-pc-linux-gnu --host=armv5l-jztech-linux-gnueabi --target=mips-linux --prefix=/home/dbh/workspace/linux-dev/nmru/prjhome/sources/bin-build/dest

    然后make,发现编译的时候大部分时候调用的armv5l-xx-gcc,顺利完成,

    make install,装到dest下面:

    然后 ls dest

    bin  lib  mips-linux  share

    看来target的确是mips,然后file 下:

    file bin/mips-linux-as
    bin/mips-linux-as: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped

    mips-linux-as是个交叉编译器哦,在arm上跑的,不过target是mips,哈哈,看来有点感觉了。

    这下可以明白,其实编译的时候编译系统根据合适的 host, build 来调用合适的gcc来做事情,可以看出来,在三个平台的时候,--build平台是跑编译脚本或者说make的,会调用 host的编译器,而且显而易见的是 host指定的一定是个交叉编译器。

    
    展开全文
  • 这是什么意思呢? ARCH 即architecture,就是选择编译哪一种cpu architecture,也就是编译arch/目录下的哪一个子目录。如指定make ARCH=arm就是编译arch/arm下的代码。如果不指定,make将使用本机(用什么机器编译...

    make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

    这是什么意思呢?

    ARCH

    即architecture,就是选择编译哪一种cpu architecture,也就是编译arch/目录下的哪一个子目录。如指定make ARCH=arm就是编译arch/arm下的代码。如果不指定,make将使用本机(用什么机器编译就是什么)的cpu作为缺省ARCH.注意:arch/arm下不但有arm体系架构特有的代码,还有arm特有的kconfig,也就是配置选项,所以在make menuconfig,make xxxx_defconfig的时候也必须指定ARCH=arm。

    CROSS_COMPILE

    即交叉编译器的前缀(prefix),也就是选择将代码编译成目标cpu的指令的工具,如指定make CROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc, arm-none-linux-gnueabi-ld等工具将代码编译成arm的可执行指令。如果不指定CROSS_COMPILE参数,make时将认为prefix为空,即使用gcc来编译。这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

     

    在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。

    如果你是为当前使用的PC机编译内核,则无须设置。

    否则的话,就要明确设置。

    这里以arm为例,来说明。

    有两种设置方法():

    a) 修改Makefile

    打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。

    ARCH           := arm
    CROSS_COMPILE  := arm-linux-

    注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

    b) 每次执行make命令时,都通过命令行参数传入这些信息。

    这其实是通过make工具的命令行参数指定变量的值。

    例如

    配置内核时时,使用

    make  ARCH=arm  CROSS_COMPILE=arm-linux-  menuconfig

    编译内核时使用

    make  ARCH=arm  CROSS_COMPILE=arm-linux- 

     

    注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。

    SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
     -e s/arm.*/arm/ -e s/sa110/arm/ \
     -e s/s390x/s390/ -e s/parisc64/parisc/ \
     -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
     -e s/sh[234].*/sh/ )

    ARCH?= $(SUBARCH)
    CROSS_COMPILE ?=

    经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。

    而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。

    最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。

    因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。

     

    SRCARCH := $(ARCH)  


    ifeq ($(ARCH),i386)
            SRCARCH := x86
    endif


    ifeq ($(ARCH),x86_64)
            SRCARCH := x86
    endif

    ifeq ($(ARCH),sparc64)
           SRCARCH := sparc
    endif

    ifeq ($(ARCH),sh64)
           SRCARCH := sh
    endif

    展开全文
  • 交叉编译工具链

    2014-05-11 15:54:30
    交叉编译工具链 有如任何其它开发活动一般,嵌入式开发的第一步是建立(setting up)用于构建嵌入式Linux内核(当然包括驱动程序)及应用程序的工具链(toolchains )。不过,嵌入式开发需要是跨平台工具链。跨平台...

    交叉编译工具链

    有如任何其它开发活动一般,嵌入式开发的第一步是建立(setting up)用于构建嵌入式Linux内核(当然包括驱动程序)及应用程序的工具链(toolchains )。不过,嵌入式开发需要是跨平台工具链。跨平台是什么意思呢?一般开发活动是在本地编译,使用是本地的工具链;而由于嵌入式的软硬资源(内存不足、没有本地编译器或操作系统都没有)限制等没法进行本地开发。需要在Linux-x86 主机(HOST)开发,使用主机的编译器生成目标(TARGET)平台代码,这个过程叫交叉编译。

     

    我们常常说的编译器有广义和狭义之分。狭义的编译器只完软件编译(或者叫软件构建)的第一步;广义的编译器包括了软件编译(或者叫软件构建)所需要代码库(比如libc)和其它构建工具(比如汇编器和连接器)。无论是什么编译器都需要支持的代码库和各种构建工具,交叉编译也不例外。一整套广义的编译器称为交叉编译工具链。

     

    何为工具链?

     

    In software, a toolchain is the set ofcomputer programs (tools) that are used to create a product (typically anothercomputer program or system of programs). The tools may be used in a chain, sothat the output of each tool becomes the input for the next, but the term isused widely to refer to any set of linked development tools.

     

    A simple software development toolchainconsists of a text editor for editing source code, a compiler and linker totransform the source code into an executable program, libraries to provideinterfaces to the operating system, and a debugger.

     

    The GNU toolchain is a blanket term for acollection of programming tools produced by the GNU Project. These tools form atoolchain (suite of tools used in a serial manner) used for developing applicationsand operating systems.

     

    Projects included in the GNU toolchain are:

     

    * GNU make: Automation tool for compilationand build;

    * GNU Compiler Collection (GCC): Suite ofcompilers for several programming languages;

    * GNU Binutils: Suite of tools includinglinker, assembler and other tools;

    * GNU Bison: Parser generator

    * GNU m4: m4 macro processor

    * GNU Debugger (GDB): Code debugging tool;

    * GNU build system (autotools):

     


    展开全文
  • 最近正在搞交叉编译,学习了一下Makefile的编写,记录一下Makefile内代码是什么意思。 代码如下:(简单的hello.ko的makefile) ifneq ($(KERNELRELEASE),) obj-m += hello.o else PWD := $(shell pwd) KDIR := /home...
  • Qt 交叉编译的路径设置

    千次阅读 2018-07-04 16:19:58
    交叉编译Qt源码时,需要设置部署路径。但是部署路径有三个变量,分别是-prefix, -extprefix 和-hostprefix。那这三个变量分别是什么意思呢?-prefix:目标板的引用路径。 这个路径有两个作用,一个是指定目标机...
  • 交叉编译 host,build target的含义: build就是你正在使用的机器,host就是你编译好的程序可以运行的平台, target就是你编译的程序可以处理的平台. 这个 build和host比较好理解,但是target就不好办了,到底什么意思呢?...
  • 交叉编译Qt源码时,需要设置部署路径。但是部署路径有三个变量,分别是-prefix, -extprefix 和-hostprefix。那这三个变量分别是什么意思呢? -prefix:目标板的引用路径。 这个路径有两个作用,一个是指定目标机...
  • GCC定义 gcc是"GNU Compiler Collection"的缩写,从字面意思可以知道它...什么是交叉编译器在嵌入式系统开发中,经常用到与交叉编译相关的术语,例如:交叉编译器,交叉连接器,交叉编译环境等。嵌入式产品的资源往...
  • docker下交叉编译环境配置

    千次阅读 2018-07-04 18:58:17
    什么在docker中搭建开发环境? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,...
  • 交叉编译 host,build target的含义:build就是你正在使用的机器,host就是你编译好的程序可以运行的平台,target就是你编译的程序可以处理的平台.这个 build和host比较好理解,但是target就不好办了,到底什么意思呢?...
  • 第一步jpeg库的移植 ... 2、解压,进入其目录, ...3、配置源码,(具体配置项可以运行命令./configure --help看看是什么意思,根据实际情况修改)  ./configure CC=arm-linux-gcc --host=arm-unknown-linux -
  • 交叉编译器详解

    2019-11-11 10:35:21
    嵌入式开发一般都是在x86平台下开发,而编译出来的软件要在arm平台上跑,所以需要交叉编译器,交叉意思就是在一个架构上编译出另一个架构的代码。arm平台一般资源有限,不适合做开发 交叉编译器安装方式 以Linaro ...
  • 什么是主机,目标机

    2010-12-21 15:03:00
    开发 开发模式: 本机开发:本机开发也就是在目标机(在嵌入式系统中通常把嵌入式系统或设备简称为目标机)中直接 进行操作系统移植及应用...及编写应用程序,在主机上应用交叉编译环境编译内核及应用程序,然后...
  • gcc,一个神奇的编译器

    万次阅读 2019-04-25 17:32:52
    gcc是“GNU Compiler Collection”的缩写,从字面意思可以知道它是一个编译器集。... 在嵌入式系统开发中,经常用到与交叉编译相关的术语,例如:交叉编译器,交叉连接器,交叉编译环境等。  嵌...
  • GCC定义 gcc是"GNU Compiler Collection"的缩写,从字面意思可以知道它...什么是交叉编译器在嵌入式系统开发中,经常用到与交叉编译相关的术语,例如:交叉编译器,交叉连接器,交叉编译环境等。嵌入式产品的资源往...
  • gcc编译器

    2018-07-23 11:15:00
    gcc是“GNU Compiler Collection”的缩写,从字面意思可以知道它是一个编译器集。... 在嵌入式系统开发中,经常用到与交叉编译相关的术语,例如:交叉编译器,交叉连接器,交叉编译环境等。  嵌...
  • arm-elf和arm-eabi的区别

    万次阅读 2010-08-17 14:56:00
    因为自己用交叉编译器编译的时候。会出现arm-elf,arm-none-eabi,arm-eabi这些选择,倒底它们有什么区别呢?what is difference between arm-elf and arm-eabi? Re: what is difference between arm-elf and arm-eabi...
  • NDK开发(一)————如何在Android Studio下进行NDK开发

    万次阅读 多人点赞 2018-01-07 14:42:36
    在AS中进行NDK开发之前,我们先来简单的介绍几个大家都容易搞懵的概念:  1....可能大家和我一样,一听到接口什么的就犯懵:“我也知道这是java本地开发接口的意思,但它具体是个什么意思我还是搞
  • 在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: ...可能大家和我一样,一听到接口什么的就犯懵:“我也知道这是java本地开发接口的意思,但它具体是个什么意思我...
  • 本周学习进度不慢,上课也能跟着老师敲代码了,老师说一些指令也知道是什么意思了,这两周我认为非常重要的快捷键就是tab键,补全代码,我自己手敲肯定出现很多错误,必须Tab键!!!!!!!!!!!!!!! 2.1...
  • 在AS中进行NDK开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: ...可能大家和我一样,一听到接口什么的就犯懵:“我也知道这是java本地开发接口的意思,但它具体是个什么意思我还是搞不明白。”...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

交叉编译什么意思