如何在使用交叉编译器时确定configure的主机值

时间:2014-02-24 14:03:53

标签: cross-compiling autoconf arm64

一般问题:如果我使用交叉编译器,如何在运行configure时告诉“--host”选项的值?

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

3 个答案:

答案 0 :(得分:31)

  

如果我使用交叉编译器,如何判断运行--host时应该提供的./configure选项的值?

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

  • 构建工具链的构建计算机
  • 主机,将执行工具链。
  • 目标计算机,其中创建的二进制文件 工具链被执行。

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

  • 原生构建,即BUILD==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
    用于构建体系结构工具链在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。这里如果set host足以交叉编译

  

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

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

答案 1 :(得分:9)

找出--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,它似乎适用于交叉编译。

答案 2 :(得分:2)

- 主持人是"三胞胎"对于最终运行最终构建的机器。在你的情况下" arm64"是架构,但它只是三元组的一部分。无论如何,它映射到字符串" aarch64"在三胞胎中。一个可能的值是

- 主机= aarch64-Linux的机器人

这个page from gnu.org提供了关于--host / - target / - build usage

的明确答案