一般问题:如果我使用交叉编译器,我如何知道我在运行配置时应该给出的“--host”选项的值?
具体:我正在为 arm64 arch 使用交叉编译器。要使用的正确“--host”值是什么?
一般问题:如果我使用交叉编译器,我如何知道我在运行配置时应该给出的“--host”选项的值?
具体:我正在为 arm64 arch 使用交叉编译器。要使用的正确“--host”值是什么?
如果我使用交叉编译器,我如何知道
--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
足以交叉编译
具体:我正在为
arm64
arch使用交叉编译器。使用的正确--host
值是多少?
对于 x86_64,--host={triplet}
通常是给定的,所以我认为通过--host={triplet}
为您的工具链设置同样适用于 arm64,但我不确定。
找出输入内容的最简单方法是在主机上--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,它似乎可以很好地用于交叉编译。
--host 是您的最终构建将在其上运行的机器的“三元组”。在您的情况下,“arm64”是架构,但它只是三元组中的一个。无论如何,它映射到三元组中的字符串“aarch64”。一个可能的值是
--host=aarch64-linux-android
这个来自 gnu.org 的页面给出了关于 --host/--target/--build 使用的明确答案