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

Ome*_*gan 12 autoconf cross-compiling arm64

一般问题:如果我使用交叉编译器,我怎么能告诉我在运行configure时应该给出的"--host"选项的值?

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

vin*_*yal 35

如果我使用交叉编译器,我怎么能告诉--host我运行时应该给出的选项的值./configure

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

  • 构建机,其中工具链构建.
  • 主机,其中,工具链将被执行.
  • 目标机器,其中由工具链创建二进制文件被执行.

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

  • 本机构建 ie BUILD==HOST==TARGET
    用于为工作站构建普通gcc.例如BUILD==HOST==TARGET==x86

  • 交叉构建 ie 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]
Run Code Online (Sandbox Code Playgroud)

您将在上面找到,具体取决于您想要做什么,您需要将其设置为交叉编译.如果所有选项都可用,那么您希望在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足以交叉编译

具体:我正在使用交叉编译器进行arm64arch.--host使用的正确值是什么?

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

  • 有谁知道arm64的“ --host”值应该是什么? (2认同)
  • 很抱歉再次提出,但是@ PixelPerfect3是正确的-问题是如何找出配置的--host和--target选项的正确值。有什么工具可以调用,以获取正确的价值?还是任何配置文件来检查这些值?独立于平台和配置-关于如何收集这些值的通用方法。从工具链名称/前缀中获取“三胞胎”的部分不是通用选项。这是更多的猜测和希望。 (2认同)

小智 9

找出输入内容的最简单方法--hostconfig.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,它似乎适用于交叉编译.

  • 这必须是正确/可接受的答案!谢谢@Drugbird!config.guess至少正确交付了主机名。拥有一种正确的方法来获得目标名称也将是一件很好的事情。某种类型的列表,或硬件供应商引用的参考。很难相信没有其他可用的东西。 (2认同)

sor*_*oid 6

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

--host=aarch64-linux-android

gnu.org 的此页面给出了关于 --host/--target/--build 用法的明确答案