19

一般问题:如果我使用交叉编译器,我如何知道我在运行配置时应该给出的“--host”选项的值?

具体:我正在为 arm64 arch 使用交叉编译器。要使用的正确“--host”值是什么?

4

3 回答 3

48

如果我使用交叉编译器,我如何知道--host我在运行时应该给出的选项的值./configure

讨论工具链创建时必须区分三台机器

  • 构建机器,构建工具链的地方。
  • 将在其中执行工具链的主机。
  • 目标机器,由工具链创建的二进制文件在其中执行。

工具链可能有四种常见的构建类型:

  • Native build ieBUILD==HOST==TARGET
    用于为工作站构建普通的 gcc。例如BUILD==HOST==TARGET==x86

  • 交叉构建,即BUILD==HOST!=TARGET
    用于构建在您的工作站上工作但为目标生成二进制文件的工具链。例如BUILD==HOST==x86 TARGET==arm

  • 跨原生构建,即BUILD!=HOST==TARGET
    用于在您的目标上工作并为目标生成二进制文件的工具链。例如BUILD==x86 HOST==TARGET==ARM

  • 加拿大工具链,即BUILD!=HOST!=TARGET
    用于构建架构 A 工具链在 B 上运行并为架构 C 生成二进制文件。例如BUILD==x86 HOST==mac TARGET==arm

有了这些基础知识,您的问题就来了。

对于任何软件,首先运行./configure --help

主机类型:

--build=BUILD           configure for building on BUILD [BUILD=HOST]
--host=HOST             configure for HOST [guessed]
--target=TARGET         configure for TARGET [TARGET=HOST]

您会在上面找到,因此取决于您想要做什么,您需要将其设置为交叉编译。如果所有选项都可用,那么您想在 arm 目标上执行然后设置--host={your toolchain triplet} --target={your toolchain triplet}

例如,如果您正在使用arm-none-linux-gnueabi-gcc,请设置--host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi。这将写入您的makefile。最后,生成的可执行文件将在目标上运行。因为--build这将自动设置,无需担心。

对于某些软件包,只有两个选项可用i.e host and build。这里如果 sethost足以交叉编译

具体:我正在为arm64arch使用交叉编译器。使用的正确--host值是多少?

对于 x86_64,--host={triplet}通常是给定的,所以我认为通过--host={triplet}为您的工具链设置同样适用于 arm64,但我不确定。

于 2014-02-24T15:44:18.647 回答
15

找出输入内容的最简单方法是在主机上--host运行。config.guess在我的机器上,它位于/usr/share/automake-1.15/,但我建议运行locate config.guess找到它。

该脚本是开源 (GPL) 的,可在此地址获得,以防它在您的机器上不可用:

https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess

在我的目标机器上,一个 tegra X1(也是一个 aarch64)它给出的答案是 aarch64-unknown-linux-gnu,它似乎可以很好地用于交叉编译。

于 2017-05-22T09:18:46.973 回答
4

--host 是您的最终构建将在其上运行的机器的“三元组”。在您的情况下,“arm64”是架构,但它只是三元组中的一个。无论如何,它映射到三元组中的字符串“aarch64”。一个可能的值是

--host=aarch64-linux-android

这个来自 gnu.org 的页面给出了关于 --host/--target/--build 使用的明确答案

于 2017-01-20T02:29:59.663 回答