https://api.dandelioncloud.cn/article/details/1487329970564485121

 —build=编译该软件所使用的平台
 —host=该软件将运行的平台
 —target=该软件所处理的目标平台

具体到不同的交叉编译器 —build —host —target 后面跟随的内容也不一样 ,需要使用arm-linux- gcc -v 查看版本信息 以确定

该命令给出了很多重要信息:

  1. nicholas@nicholas-virtual-machine:~/cmake-3.8.0$ arm-linux-gnueabihf-gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=arm-linux-gnueabihf-gcc
  4. COLLECT_LTO_WRAPPER=/home/nicholas/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../libexec/gcc/arm-linux-gnueabihf/4.8.3/lto-wrapper
  5. Target: arm-linux-gnueabihf
  6. Configured with: /home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/src/gcc-linaro-4.8-2014.03/configure
  7. --build=x86_64-build_unknown-linux-gnu
  8. --host=x86_64-build_unknown-linux-gnu
  9. --target=arm-linux-gnueabihf
  10. --prefix=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/install
  11. --with-sysroot=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc
  12. --enable-languages=c,c++,fortran
  13. --disable-multilib
  14. --enable-multiarch
  15. --with-arch=armv6
  16. --with-tune=arm1176jz-s
  17. --with-fpu=vfp
  18. --with-float=hard
  19. --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03'
  20. --with-bugurl=https://bugs.launchpad.net/gcc-linaro
  21. --enable-__cxa_atexit --enable-libmudflap
  22. --enable-libgomp --enable-libssp
  23. --with-gmp=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  24. --with-mpfr=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  25. --with-mpc=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  26. --with-isl=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  27. --with-cloog=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  28. --with-libelf=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static
  29. --enable-threads=posix
  30. --disable-libstdcxx-pch
  31. --enable-linker-build-id
  32. --enable-plugin
  33. --enable-gold
  34. --with-local-prefix=/home/zhehe01/work/bzr/pi-build/builds/arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc
  35. --enable-c99
  36. --enable-long-long --with-float=hard
  37. Thread model: posix
  38. gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)

下面是4412的交叉编译器的版本信息:

  1. nicholas@nicholas-virtual-machine:/$ arm-none-linux-gnueabi-gcc -v
  2. Using built-in specs.
  3. Target: arm-none-linux-gnueabi
  4. Configured with: /scratch/julian/2009q3-respin-linux-lite/src/gcc-4.4/configure
  5. --build=i686-pc-linux-gnu
  6. --host=i686-pc-linux-gnu
  7. --target=arm-none-linux-gnueabi
  8. --enable-threads
  9. --disable-libmudflap
  10. --disable-libssp
  11. --disable-libstdcxx-pch
  12. --enable-extra-sgxxlite-multilibs
  13. --with-arch=armv5te
  14. --with-gnu-as
  15. --with-gnu-ld
  16. --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}'
  17. --enable-languages=c,c++
  18. --enable-shared
  19. --disable-lto
  20. --enable-symvers=gnu
  21. --enable-__cxa_atexit
  22. --with-pkgversion='Sourcery G++ Lite 2009q3-67'
  23. --with-bugurl=https://support.codesourcery.com/GNUToolchain/
  24. --disable-nls
  25. --prefix=/opt/codesourcery
  26. --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc
  27. --with-build-sysroot=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/libc
  28. --with-gmp=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
  29. --with-mpfr=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
  30. --with-ppl=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
  31. --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
  32. --with-cloog=/scratch/julian/2009q3-respin-linux-lite/obj/host-libs-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
  33. --disable-libgomp
  34. --enable-poison-system-directories
  35. --with-build-time-tools=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin
  36. --with-build-time-tools=/scratch/julian/2009q3-respin-linux-lite/install/arm-none-linux-gnueabi/bin
  37. Thread model: posix
  38. gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)

下面是树莓派端输入gcc -v的输出

  1. root@raspberrypi:~# gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=gcc
  4. COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/6/lto-wrapper
  5. Target: arm-linux-gnueabihf
  6. Configured with: ../src/configure -v
  7. --with-pkgversion='Raspbian 6.3.0-18+rpi1+deb9u1'
  8. --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs
  9. --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++
  10. --prefix=/usr
  11. --program-suffix=-6
  12. --program-prefix=arm-linux-gnueabihf-
  13. --enable-shared
  14. --enable-linker-build-id
  15. --libexecdir=/usr/lib
  16. --without-included-gettext
  17. --enable-threads=posix
  18. --libdir=/usr/lib
  19. --enable-nls
  20. --with-sysroot=/
  21. --enable-clocale=gnu
  22. --enable-libstdcxx-debug
  23. --enable-libstdcxx-time=yes
  24. --with-default-libstdcxx-abi=new
  25. --enable-gnu-unique-object
  26. --disable-libitm
  27. --disable-libquadmath
  28. --enable-plugin --with-system-zlib
  29. --disable-browser-plugin
  30. --enable-java-awt=gtk
  31. --enable-gtk-cairo
  32. --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf/jre
  33. --enable-java-home
  34. --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf
  35. --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf
  36. --with-arch-directory=arm
  37. --with-ecj-jar=/usr/share/java/eclipse-ecj.jar
  38. --with-target-system-zlib
  39. --enable-objc-gc=auto
  40. --enable-multiarch
  41. --disable-sjlj-exceptions
  42. --with-arch=armv6
  43. --with-fpu=vfp
  44. --with-float=hard
  45. --enable-checking=release
  46. --build=arm-linux-gnueabihf
  47. --host=arm-linux-gnueabihf
  48. --target=arm-linux-gnueabihf
  49. Thread model: posix
  50. gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1+deb9u1)

///

交叉编译中的build、host和target

build、host和target

在交叉编译中比较常见的一些参数就是build、host和target了,正确的理解这三者的含义对于交叉编译是非常重要的,下面就此进行解释
  —build=编译该软件所使用的平台
  —host=该软件将运行的平台
  —target=该软件所处理的目标平台

  我们以 gcc 为例子来 讲解 这三者的作用
  在gcc编译中我们使用
  ./configure —build=编译平台 —host=运行平台 —target=目标平台 [各种编译参数]
  来配置gcc的源代码,以让其编译出我们需要的gcc编译器。

  那么在这组配置参数中:
    —build:
    表示目前我们正在运行的平台名称是什么,如果当前我们是在intel的pentium机器中编译该系统,那么我们的—build就可能是 i686-pc-linux-gnu,当然如果我们在其它种类的机器上编译那么这个build就应该是那个机器所对应的平台名称。
     该参数在不指定的情况下将自动尝试猜测目前平台的名称。

    —host:
      表示我们把这个编译好的gcc在什么样的平台下运行,在交叉编译过程中这个需要我们来指定,因为机器自己是不能知道我们心里是怎么想的,那 么我们可以明确的告诉它,我们要做出来的程序是运行在“龙芯”上的,但是目前还不能直接指定“龙芯”,因此我们这里指定为mips64el- unknown-linux-gnu(如果你省点事情那么就用这个名字好了,如果你想用个有个性的名字,那么请你想明白它的含义再动手,并且做好后面的过 程需要多出一些手续的麻烦的心理准备)。
    —host也可以不指定,那么host将自动使用build来定义自己,不过那将不再是交叉编译。
    注:—build和—host在不同的时候就被配置文件认定为交叉编译方式。

    —target:
     该参数的目的是让配置程序知道这个软件被编译后使用来处理什么平台上的文件的。
     target这个参数只有在为数不多的几个包中有用处,虽然在./configure —help中经常能看到该参数,但实际上绝大多数软件包都是不需要该参数的。
     从这个参数的含义来看,说明其处理的目标只有在不同平台下表现为不同的时候才有作用,而这些文件通常都跟目标平台 的指令系统直接或间接有关:比如可执行文件,对于不同平台下使用的可执行文件的编码可以是完全不同的,因此必须使用 对应能处理该编码的程序才能正确处理,而如果错误的使用则可能导致程序错误或者破坏文件,对于这样要处理不同平台下会 出现不同编码的软件,我们就应当对它指定目标平台,以免另其错误处理;而对于文本文件,对于不同的平台同样的内容表达的 含义都是相同的,因此我们不需要专门针对平台来处理,这样的软件我们就可以不必对它指定需要处理的平台了。

  1. 我们来总结一下:

    build:自动测试在用平台名称,若无法检测出来则需要指定。
    host:若无指定,自动使用build的结果。
    build和host相同时表示本地编译,若不相同则表示交叉编译。
    target:表示需要处理的目标平台名称,若无指定使用host相同名称,gcc、binutils等于平台指令相关软件有此参数,多数软件此参数无用处。

  1. 综合的例子:
  2. 我们需要在x86下编译一个运行于arm上的编译器gcc,这个gcc产生mips平台的目标代码。那么我们的配置方式是:
  3. --build=x86 --host=arm --target=mips
  4. (仅是示意,方便理解,具体写法请google)

[转帖]configure 各种配置的更多相关文章

  1. Linux 下configure 参数配置与软件的安装与卸载

    Linux环境下的软件安装,并不是一件容易的事情:如果通过源代码编译后在安装,当然事情就更为复杂一些:现在安装各种软件的教程都非常普遍:但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而 ...

  2. php编译安装configure完全配置够日常所用功能

    php编译安装configure完全配置够日常所用功能 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/p ...

  3. qt configure参数配置介绍

    ======================================全文是按照./configure -help来翻译的==================================== ...

  4. PHP安装之configure的配置参数

    1.生成环境安装配置如下 要求安装如下库: imagickgdmysqlmysqlimysqlndphalconPharsoapsocketsxwebxsvczipzlib 具体查看 vim php- ...

  5. Nginx Configure时配置

    Configure Arguments Configure arguments common for nginx binaries from pre-built packages for stable ...

  6. 指定特殊的安装目录用configure进行配置

    linux - Make install, but not to default directories? - Stack Overflow I want to run 'make install' ...

  7. [转帖]springboot2.0配置连接池(hikari、druid)

    springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...

  8. [转帖]Centos7防火墙配置rich-rule实现IP端口限制访问

    Centos7防火墙配置rich-rule实现IP端口限制访问 2019-02-18 18:05:35 sunny05296 阅读数 2143  收藏 更多 分类专栏: Linux   版权声明:本文 ...

  9. [转帖]Kubernetes - nginx-ingress 配置跳坑指南

    Kubernetes - nginx-ingress 配置跳坑指南 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  10. [转帖]nginx location配置详细解释

    nginx location配置详细解释 http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-exp ...

随机推荐

  1. 光大银行刘淼:基于华为云GaussDB(DWS) 数据仓库创新实践

    摘要:面向未来数据平台3.0要做架构减法,平台由N->1,华为云GaussDB(DWS)未来作为数据仓库唯一平台,数据链路实现从数据湖直接到华为云GaussDB(DWS)数据仓库. 日前,华为举 ...

  2. 不信谣不传谣,亲自动手验证ModelBox推理是否真的“高性能”

    摘要:"高性能推理"是ModelBox宣传的主要特性之一,不信谣不传谣的我决定通过原生API和ModelBox实现相同案例进行对比,看一下ModelBox推理是否真的"高 ...

  3. 活动回顾|火山引擎 DataLeap 分享:DataOps、数据治理、指标体系最佳实践(文中领取 PPT)

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在 7 月 21 日至 22 日举行的 ArchSummit 全球架构师峰会(深圳站)及 DataFunCon.数 ...

  4. python 搭建HTTP服务器

    WSGI(Web Server Gateway Interface,web服务器网关接口)主要规定了服务器端和应用程序之间的接口,即规定了请求的URL到后台处理函数之间的映射该如何实现.wsgiref ...

  5. java中类的普通初始化块一定在静态初始化块后运行吗

    大部分教程都会告诉我们静态初始化块和静态字段总是在初始化块和普通类字段前运行,事实上也确实如此,直到我看到下面这样的代码: public class Test { static Test test = ...

  6. k8s-部署 Kubernetes 集群(kubeadm方式)

    一 机器准备 IP 主机名 角色 配置 安装组件 192.168.198.150 master-1 master 2U2G master组件 etcd kubectl 192.168.198.151 ...

  7. 【LibCurl】C++使用libcurl实现HTTP POST和GET、PUT

    libcurl简介 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持HT ...

  8. 5G“乍到”,图扑带你了解室内定位可视化的实现与新突破

    前言 现代工业化的推进在极大加速现代化进程的同时也带来的相应的安全隐患,在传统的可视化监控领域,一般都是基于 Web SCADA 的前端技术来实现 2D 可视化监控,本系统采用 Hightopo 的  ...

  9. 一、Mycat实战---为什么要用mycat

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 本 ...

  10. 开发人员常用Docker指令

    什么是 Docker? Docker 是一个开源的容器化平台,用于构建.打包和运行应用程序.它允许开发者将应用程序及其依赖项打包成一个独立的可移植容器,可以在任何环境中运行,无论是开发环境.测试环境还 ...