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

    2020-05-17 14:52:11
    交叉编译是指在一个硬件平台生成另一个硬件平台的可执行文件。而Go提供了非常方便的交叉编译方式。 如何编译 Go交叉编译,涉及到几个环境变量的设置: GOARCH、GOOS和CGO_ENABLED。 GOARCH:编译目标平台的...

    交叉编译是指在一个硬件平台生成另一个硬件平台的可执行文件。而Go提供了非常方便的交叉编译方式。

    如何编译

    Go交叉编译,涉及到几个环境变量的设置: GOARCH、GOOS和CGO_ENABLED。

    • GOARCH:编译目标平台的硬件体系架构(amd64, 386, arm, ppc64等)。

    • GOOS:编译目标平台上的操作系统(darwin, freebsd, linux, windows)。

    • CGO_ENABLED:代表是否开启CGO,1表示开启,0表示禁用。由于CGO不能支持交叉编译,所以需要禁用。

    GO中env的具体环境变量的注释,可通过输入命令go help environment查看。

     ~ $ go help environment
    ...
      GOARCH
        The architecture, or processor, for which to compile code.
        Examples are amd64, 386, arm, ppc64.
    ...
      GOOS
        The operating system for which to compile code.
        Examples are linux, darwin, windows, netbsd.
    ...
      CGO_ENABLED
        Whether the cgo command is supported. Either 0 or 1.

    Mac 下编译 Linux 和 Windows 64位可执行程序

    export CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    export CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

    Linux 下编译 Mac 和 Windows 64位可执行程序

    export CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
    export CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

    Windows 下编译 Mac 和 Linux 64位可执行程序

    SET CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
    SET CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

    其他平台或32位系统类似,这里就不再赘述。

    GO是如何做到交叉编译?

    Go交叉编译的实现通过在文件顶部增加构建标记,进行选择编译。

    // +build

    注:Go源码里的编译器源码位于$GOROOT/src/cmd/compile路径下,链接器源码位于$GOROOT/src/link路径下。

    我们的切入点从Go编译器的main函数为入口,代码位于$GOROOT/src/cmd/compile/main.go。以环境变量GOARCH为例,看一下Go编译器是如何通过构建标记来选择对应的体系架构目标进行编译。

    package main
    ​
    // 引用了Go所能支持的所有架构体系库代码,根据GOARCH选择对应的体系代码
    import (  
      "cmd/compile/internal/amd64"
      "cmd/compile/internal/arm"
      "cmd/compile/internal/arm64"
     ....
      "cmd/compile/internal/x86"
    ...
    )
    ​
    // 初始化代码
    var archInits = map[string]func(*gc.Arch){
      "386":      x86.Init,
      "amd64":    amd64.Init,
      "arm":      arm.Init,
      "arm64":    arm64.Init,
    ...
    }
    ​
    func main() {
      // disable timestamps for reproducible output
      log.SetFlags(0)
      log.SetPrefix("compile: ")
    ​
    // 通过objabi.GOARCH选择对应的架构体系
      archInit, ok := archInits[objabi.GOARCH]
    ...
      gc.Main(archInit)
    ...
    }

    objabi.GOARCH是$GOROOT/src/cmd/internal/objabi/util.go中的变量GOARCH。

    var (
      defaultGOROOT string // set by linker
    ​
    ...
      GOROOT   = envOr("GOROOT", defaultGOROOT)
      GOARCH   = envOr("GOARCH", defaultGOARCH)
      GOOS     = envOr("GOOS", defaultGOOS)
    ...
    )

    defaultGOARCH是runtime包里的GOARCH值,如下所示。

    // Code generated by go tool dist; DO NOT EDIT.
    ​
    package objabi
    ​
    import "runtime"
    ​
    ...
    const defaultGOOS = runtime.GOOS
    const defaultGOARCH = runtime.GOARCH
    ...

    而该值又是通过sys.GOARCH赋值。$GOROOT/src/runtime/extern.go。

    // GOARCH is the running program's architecture target:
    // one of 386, amd64, arm, s390x, and so on.
    const GOARCH string = sys.GOARCH

    终于来到了重点!$GOROOT/src/runtime/internal/sys/agoarch_amd64.go

    // Code generated by gengoos.go using 'go generate'. DO NOT EDIT.
    ​
    // 我的机器平台是amd64,且未对GOARCH的值做修改。因此这里的构建标签是amd64.
    // +build amd64
    ​
    package sys
    ​
    const GOARCH = `amd64`

    通过构建amd64的编译标签,从而控制了Go编译时需要选择对应的架构代码。即:如果不是amd64,例如arm,那对应的编译代码就是$GOROOT/src/runtime/internal/sys/agoarch_arm.go。

    如何利用交叉编译?

    虽然golang 可以跨平台编译,但却无法解决系统的差异性。在靠近底层逻辑的项目中,我们需要直接调用操作系统函数,例如同样是实现IO多路服用,在darwin系统调用kqueue,而linux系统需调用epoll。

    相同功能可以编写类似xxx_windows.go xxx.Linux.go文件,根据操作系统编译对应源文件,而不是在文件中用if else规划执行路径。

    交叉编译同样可以理解为条件编译,通过构建的build标签,选择需要编译进最终执行二进制文件的代码。

    这里给一个简单的条件编译示例,如下。

    代码文件

    • go.mod

    • main.go

    • myfunc.go

    main.go:程序入口,调用位于myfunc.go中的speak函数。

    package main
    ​
    import "fmt"
    ​
    func main() {
      fmt.Println("mike")
      speak("hello")
    }

    myfunc.go: 构建了build标签,需要build命令 带上-tag speak,该代码才能被编译。

    //+build speak
    ​
    package main
    ​
    func speak(s string) {
      println("speak:", s)
    }

    执行命令

    $ go build -o main
    $ ./main

    输出

    mike

    可以看到,在main函数中的speak()函数并没有被执行,因为myfunc.go没有被编译。如果需要将myfunc.go编译进最终的执行代码,则执行命令

    $ go build -tags speak -o main
    $ ./main

    输出

    $ mike
    $ speak: hello

    上述条件编译示例对你是否有启发呢?

    举例:项目开发中,如果想打印程序中的某些信息以便调试,而又不想打印相关代码生成到最终的可执行文件中,那么条件编译便可派上用场。

    本文内容同步在作者个人微信公众号:Golang技术分享。欢迎关注!

     

     

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

    2020-02-19 13:29:38
    交叉编译是指在一种平台上编译出运行于另一种平台的程序。这里的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统。交叉编译主要针对嵌入式领域,因为嵌入式系统资源受限,没有办法在嵌入式...

    1. 交叉编译

    交叉编译是指在一种平台上编译出运行于另一种平台的程序。这里的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统。交叉编译主要针对嵌入式领域,因为嵌入式系统资源受限,没有办法在嵌入式平台上运行一套编译环境,因此需要在其他性能更强劲的平台上借助交叉编译工具链来制作可在嵌入式平台上运行的程序。

    交叉编译与普通编译基本步骤一样:

    [1] configure
    在编译前进行配置。如果 --host 参数与 --build 参数不同,则是交叉编译。否则就是普通编译。
    [2] make
    编译。根据上一步 configure 配置生成的参数,调用相应的编译工具链编译生成目标程序。
    [3] make install
    安装。将 make 生成的目标程序安装到指定目录。如果不运行 make install,手动拷贝到指定目录也可。

    1.1 --build --host --target

    看一下 configure 步骤中 --build、--host 和 --target 三个参数的定义,下面在 gdb 源码目录运行 './configure --help'

    ./configure --help
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
      --target=TARGET   configure for building compilers for TARGET [HOST]

    源码经过编译生成可执行程序。根据执行编译操作的平台、可执行程序的运行平台、可执行的程序的处理平台,可以将编译操作分为多种类型,对应的三个配置参数如下:
    --build:运行编译工具链的平台,也就是正在执行编译操作的平台。如果未指定此参数,则通过 config.guess 猜测得到。通常都不指定此参数。

    --host:可执行程序将运行的平台。如果未指定此参数,则和 --build 相同。如果 --host 和 --build 不同,是交叉编译;否则是普通编译。

    --target:可执行程序将处理的平台。如果未指定此参数,则和 --host 相同。一般来说,程序运行在什么平台,处理的就是什么平台,此参数值和 --host 参数相同,不需显式指定,所以通常不会关注到此参数。但在制作交叉编译工具 (如 gcc、gdb 等) 这种特殊情况下,此值和 --host 不同,例如交叉编译器 arm-linux-gcc,它运行在 x86-linux 平台 (--host 参数),但处理的是 arm-linux 平台 (--target 参数)。如果是交叉编译一个普通的应用,如运行于 arm-linux 平台的 tftp 程序,则它的运行平台和处理平台都是 arm-linux 平台。

    1.2 三种编译类型

    编译类型可以分为三种,主要体现在 configure 阶段不同的配置参数:(假设交叉编译工具链安装在 x86-linux 平台,待编译的目标嵌入式平台为 arm-linux 平台,这里仅为了说明意图,平台命名并不严谨)

    [1] 编译 PC 平台普通程序
    一般执行如下形式的配置命令:

    ./configure

    将缺省的参数补全,实际等效于如下命令:

    ./configure --build=x86_linux --host=x86_linux --target=x86_linux

    [2] 编译交叉编译工具链
    交叉编译工具链的特别之处在于,它在 x86-linux 平台上运行,处理的却是 arm-linux 平台。制作交叉编译工具链并不需要使用交叉编译。一般执行如下形式的配置命令:

    ./configure --target=arm_linux

    将缺省的参数补全,实际等效于如下命令:

    ./configure --build=x86_linux --host=x86_linux --target=arm_linux

    [3] 交叉编译嵌入式平台程序
    生成嵌入式平台的程序需要用用到交叉编译。一般执行如下形式的配置命令:

    ./configure --host=arm_linux CC=arm-linux-gcc

    将缺省的参数补全,实际等效于如下命令:

    ./configure --build=x86_linux --host=arm_linux --target=arm_linux CC=arm-linux-gcc

    实际上,如果我们要制作运行于嵌入式平台的编译工具(比如 gcc、gdb 等),也可以先执行上面 configure 命令然后执行 make,但是生成的 gcc、gdb 等工具基本上无法在目标嵌入式平台上正常运行,因为硬件带不动,所以嵌入式平台的编译工具链是按[2]中的方法制作 ,而不是按[3]中的方法制作。

    2. GDB交叉编译与使用实例

    嵌入式平台中使用 GDB 时会用到 GDB 的远程 (remote) 调试模式:在目标板上通过 gdbserver 运行待调试的程序,在宿主机上运行 gdb 并通过 'target remote [ip]:[port]' 来连接到目标板上的 gdbserver,从而启动远程调试。各种调试命令在宿主机上输入,程序执行效果(包括打印)在目标板上展示,这很容易理解,因为正在调试的程序本来就是在目标板上运行的。不在目标板上直接运行 gdb 进行调试是因为目标板硬件配置低,跑不动 gdb,当然,不排除某些嵌入式平台的性能很强劲,能够正常运行 gdb。当嵌入式平台的硬件越来越强大时,嵌入式平台与通用计算机平台的界限也越来越模糊,实际情况也正是这样,硬件性能越来越强悍,资源短缺的问题越来越淡化,这种发展形势下,嵌入式技术的没落是必然的结果。

    搭建嵌入式平台下的 gdb 调试环境,对理解前面交叉编译过程中的 --build、--host 和 --target 三个参数非常用帮助。

    2.1 环境描述

    虚拟机:CPU:x86_64,系统:openSUSE Leap 42.3,IP:192.168.202.240
    开发板:CPU:mips mt7688,系统:openwrt linux,IP:192.168.202.141
    虚拟机上安装的 C 交叉编译器为 mipsel-openwrt-linux-gcc,即交叉编译工具链的前缀为 mipsel-openwrt-linux。

    2.2 下载源码

    从 ftp://ftp.gnu.org/gnu/gdb 下载最新版源码 gdb-8.2.tar.gz,解压:

    [1] tar zxvf ./gdb-8.2.tar.gz
    [2] cd gdb-8.2

    2.3 编译 gdb

    [1] cd gdb-8.2
    [2] ./configure --target=mipsel-openwrt-linux
    [3] make

    gdb 运行在虚拟机上,所以它不需要交叉编译。--build 和 --host 参数留空,实际使用的是虚拟机的平台参数。gdb 虽运行在虚拟机上,但它处理的是开发板平台的程序,所以指定 --target 为 mipsel-openwrt-linux,值取的是交叉编译工具链前缀。

    2.4 交叉编译 gdbserver

    [1] cd gdb-8.2/gdb/gdbserver
    [2] ./configure --host=mipsel-openwrt-linux CC=mipsel-openwrt-linux-gcc
    [3] make

    gdbserver 运行在开发板上,所以需要交叉编译。--build 参数留空,实际使用的是虚拟机的平台参数。--host 参数指定虚拟机平台,值为 mipsel-openwrt-linux。--target 参数留空,所以它的取值将等于 --host 参数值。

    2.5 以 remote 方式使用 gdb

    开发板:开发板 IP 是 192.168.202.141,则输入下述任一条指令皆可

    gdbserver :1234 test
    gdbserver 127.0.0.1:1234 test
    gdbserver 192.168.202.141:1234 test

    主机:首先在 SHELL 命令行里运行 gdb 应用

    ./gdb

    运行上一条命令后,SHELL 将进入 gdb 模式,下列几条指令中 '(gdb)' 是提示符:

    (gdb) target remote 192.168.202.141
    (gdb) b main.c:55
    (gdb) c

    上面第一条命令是远程连接到开发板上的 gdbserver。连接之后,就是正常使用了。第二条命令是设置断点。第三条命令是运行程序,注意待调试的程序实际已在开发板上运行了,所以要使用 'c' 指令,而不能使用 'r' 指令,如果输入 'r' 指令,可以看到提示 remote 模式不支持 'r' 指令:

    (gdb) r
    The "remote" target does not support "run".  Try "help target" or "continue".

    3. 遗留问题

    交叉编译过程中,一般使用交叉编译工具链的前缀作 --host 及 --target 的值;--build 参数一般不指定,编译时自动推测。这些都是在实践层面,一般就算写错了,多试一试最终都能编译通过。而对平台描述的定义,即 --build、--host 及 --target 的值的具体取值规则,我没有找到正式的出处和定义,是的,网上没查到。

    4. ./configure -build,-host,-target设置

    1、build: 执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。

    2、host: 编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译,本机执行。所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。

    3、target: 这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。

    4、让我们以编译gcc为例:

    1)命令:./configure --build=powerpc-linux --host=powerpc-linux --target=powerpc-linux' 

    说明:利用powerpc-linux的编译器(--build)对gcc进行编译,编译出来的gcc运行在powerpc-linux(--host),这个gcc用来编译能够在powerpc-linux(--target)运行的代码。

    作用:当然没有人会用这个选项来编译gcc。

    2)命令:./configure --build=i386-linux --host=powerpc-linux --target=powerpc-linux

    说明:利用i386-linux(--build)的编译器对gcc进行编译,编译出来的gcc运行在powerpc-linux(--host),这个gcc用来编译能够在powerpc-linux(--target)运行的代码。

    作用:这个选项可以用来为其他的机器编译它的编译器。

    3)命令:./configure --build=i386-linux --host=i386-linux --target=powerpc-linux

    说明:利用i386-linux(--build)的编译器对gcc进行编译,编译出来的gcc运行在i386-linux(--host),这个gcc用来编译能够在powerpc-linux(--target)运行的代码。

    作用:这个选项用来在i386主机上建立一个powerpc-linux的交叉编译环境。

    4)命令:./configure --build=powerpc-linux --host=i386-linux --target=powerpc-linux

    说明:利用powerpc-linux(--build)的编译器对gcc进行编译,编译出来的gcc运行在i386-linux(--host),这个gcc用来编译能够在powerpc-linux(--target)运行的代码。

    作用:这个选项可以用来在i386主机上建立一个powrpc-linux的交叉编译环境,但是交叉编译环境在powerpc-linux 编译出来,安装到i386-linux主机上,估计没有多少人会这么用吧。

    总的来说,只有host !=build的时候编译才是交叉编译。否则就是正常编译。

    5. 参考资料

    嵌入式 Linux 的 GDB 调试环境建立
    Python Exception 异常信息
    QT 远程调试 ARM 板中 python 的问题

    展开全文
  • 交叉编译原理分析

    2019-10-17 11:21:26
    交叉编译是指在一种环境(操作系统+芯片指令)中编译另外一种环境的程序。 名词定义: host:执行编译操作的环境 target:最终运行编译结果的环境 有些什么特殊的地方: 编译器一定是host中的程序,但是编译器输出...

    什么是交叉编译:

    交叉编译是指在一种环境(操作系统+芯片指令)中编译另外一种环境的程序。

    名词定义:

    1. host:执行编译操作的环境
    2. target:最终运行编译结果的环境

    有些什么特殊的地方:

    1. 编译器一定是host中的程序,但是编译器输出的程序却是是target中运行的。
    2. host上面不存在target中编译或者运行需要的头文件和库。

    要做的事情:

    1. 需要一种能够在host上执行,然后把c/c++代码编程target上面运行的二进制执行文件的编译器。
      1. 通过cmake的CMAKE_C_COMPILER和CMAKE_CXX_COMPILER可以设置编译器。
      2. 每个target环境需要提供我们需要的编译工具。工具里面一般分为host和target两个目录。注意编译器一定要到host里面去找。
      3. 并且有的编译器其实是很多编译器的集合。比如CUDA的编译器nvcc在运行的时候还需要提供c++的编译器的路径。这个可以通过CMAKE_CUDA_HOST_COMPILER来设置。
    2. 设置能够找到target中的库和头文件的地址
      1. 可以通过cmake的CMAKE_FIND_ROOT_PATH设置这个目录。
      2. 也有的编译器要求设置特殊的环境变量来制定查找的目录,这个更具编译工具的文档来确定。
    3. 上面说的这些操作就是所谓的toolchain。有的编译工具会提供一个toolchain的脚本,你只需把这个脚本的地址告诉cmake就行了。使用CMAKE_TOOLCHAIN_FILE来设置。不过现在应该对toolchain也没有太多神秘感了。
    展开全文
  • 所谓交叉编译

    2010-02-04 16:05:00
    交叉编译是指,在一种计算机环境中运行特定的编译器编译出可以在另一种环境下运行的代码的行为。之所以这样做,是不得已而为之,由于某些原因导致目的平台无法运行该编译器。 与此相对的是本地编译,即在某平台上...

            交叉编译是指,在一种计算机环境中运行特定的编译器编译出可以在另一种环境下运行的代码的行为。之所以这样做,是不得已而为之,由于某些原因导致目的平台无法运行该编译器。

            与此相对的是本地编译,即在某平台上编译出在自身平台可以运行的代码。

    展开全文
  • 编译-交叉编译

    2020-01-08 11:31:10
    是指在一个平台上生成另一个平台上的可执行代码 同一个体系结构可以运行不同的操作系统,同样一个操作系统也可以在不同的体系结构上运行 例:常说的x86 Linux平台(指inter x86体系结构及Linux for x86操作系统...
  • ARM交叉编译工具

    千次阅读 2018-09-17 18:12:27
    交叉编译就是在一种平台架构上编译在另外一种平台体系架构运行的程序。常见的在X86的服务器上编译ARM linux的程序,或者windows环境下编译ARM MCU的程序。 交叉编译工具链一套综合开发工具,包括编译器、链接...
  • 交叉编译

    2010-09-12 17:17:00
    交叉编译(cross-compilation)是指,在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。 具体:交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们...
  • 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编译过程中一个比较关键的问题:configure 过程中 --build, --host, --target 参数的区别。...交叉编译是指在一种平台上编译出运行于另一种平台的程序。这里的平...
  • 所谓的交叉编译是:编译的平台环境与编译的成果所运行的平台,不是一类平台。通常X86平台下编译成果物,提供给arm下要运行的程序或内核。 因此需要交叉编译工具链来解决平台差异化问题 。 材料准备 1、下载交叉...
  • 交叉编译知识

    2018-04-23 22:40:02
    1、交叉开发交叉开发是指先在一台通用PC上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。通用PC称为宿主机,嵌入式设备称为目标机。2、交叉开发环境交叉开发环境(Cross Development ...
  • 交叉编译环境

    2014-03-04 16:36:50
    在嵌入式系统开发中,经常用到与交叉编译(cross compiling)相关的术语,那交叉编译到底是指什么呢? 嵌入式系统往往资源都是很有限的,如果其资源和我们平常用的桌面计算机(在嵌入式系统开发中我们称之为主机...
  • 1.交叉编译是什么 交叉编译:是指在一个平台下生成另外一个平台的可执行代码。在window上面编译C51代码,并编译成可执行文件,如:xx.hex。 2.编译是什么 编译指在该平台下编译自己平台可执行的代码。 3.为什么要...
  • 制作自己的交叉编译环境

    千次阅读 2007-01-25 19:06:00
    交叉编译是指在一台电脑上来编译另一种结构的电脑上的代码,编译生成的程序不是运行在本机上的,而是另一种结构的机子上(^_^,快晕了...),打个比 方吧,比如我的系统是x86结构的,如果我需要编译一个arm结构的程序,...
  • 文章目录什么是交叉编译维基百科百度百科什么是条件...交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。交叉编译器在目标系统平台(开发出来的应用程序...
  • 交叉编译环境搭建

    2020-12-27 13:32:32
    交叉编译环境搭建 编译这个事情呢,就是把源代码编译成机器可以直接执行的机器码用的,一般来说呢,我们C或C++这样的编程语言。真说起来,java也有编译,python也有编译,只不过这些编程语言都编译成其对应...
  • 交叉编译是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。 2. 什么是宿主机和目标机 宿主机(host)是指使用交叉编译工具链执行编译的主机,一般配置较高,如PC主机;目标机(target)是指运行交叉...
  • 自己制作arm-linux交叉编译环境(一)

    千次阅读 2010-11-06 12:14:00
    自己制作arm-linux交叉编译环境(一)-scratch篇 收藏  交叉编译是指在一台电脑上来编译另一种结构的电脑上的代码,编译生成的程序不是运行在本机上的,而是另一种结构的机子上(^_^,快晕了...),打个比方...
  • 交叉编译是指在一台电脑上来编译另一种结构的电脑上的代码,编译生成的程序不是运行在本机上的,而是另一种结构的机子上(^_^,快晕了...),打个比方吧,比如我的系统是x86结构的,如果我需要编译一个arm结构的程序,那...
  • arm-Linux交叉编译

    万次阅读 2017-04-19 21:14:01
    相对而言的交叉编译指在一个平台上生成另一个平台的可执行代码。 常见的交叉编译有以下三种 在windows pc 上,利用ads,使用arm cpu的可执行代码。在linux pc 上,利用arm-linux-gcc编译器,编译出正对linux ...
  • 什么交叉编译

    2017-12-28 11:30:00
    1.1、高级编程语言是指符合人类思维的被程序员直接用来编程语言(如C语言:使用特定语句直接实现诸如条件判断分叉执行、条件判断循环执行、加减乘除取余移位运算、与或非逻辑运算等。高级编程语言直接面向人类思维)...
  • clapack交叉编译的问题

    2018-08-10 11:10:16
    下载clapack源代码进行交叉编译时,需要在目录下创建一个make.inc文件,这个文件会指定交叉编译器,其中需要指定CC LOADER ARCH,这里CC交叉编译器的gcc,LOADER的什么应该ld,而ARCH则ar,需要...
  • 什么是交叉编译工具 http://elinux.org/Toolchains ... ... 要解释交叉编译工具,我们首先要理解三个基本概念: ... 编译平台:是指该编译器是在哪个平台编译出来的 编译主机:编译器运行在哪个平台 ...
  • 交叉编译: 在一种平台上编译,编译出来的程序,放到别的平台上运行。即编译的环境和运行的环境不一样的。 交叉编译的原因 交叉编译处的程序,所要运行的目标环境中,各种资源都相对有限,所以很难进行直接的本地...
  • 交叉编译工具链的安装 交叉编译工具链arm-linux-gnueabihf下载网址:https://www.linaro.org/downloads/ arm-linux-gnueabihf和armeb-linux-gnueabihf之间的区别 armeb中的 eb(big-endian)大端的意思.默认小端...
  • 搭建交叉编译环境

    2011-09-28 11:15:00
    4.1、搭建交叉编译环境4.1.1、概述交叉编译,就是用运行在一种计算机环境中的编译程序,去编译出在另外一种环境下运行的代码。具有这种能力的编译器就叫交叉编译器。换而言之,就是在一个平台上生成另一个平台上的可...
  • 在嵌入式系统开发中,经常用到与交叉编译(cross compiling)相关的术语,那交叉编译到底是指什么呢? 嵌入式系统往往资源都是很有限的,如果其资源和我们平常用的桌面计算机(在嵌入式系统开发中我们称之为主机...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 173
精华内容 69
关键字:

交叉编译是指