通用问题: 如果我使用交叉编译器,我如何确定运行configure时应给予的"--host"选项的值?
具体问题:我正在使用面向arm64架构的交叉编译器。应该使用什么正确的"--host"值?
通用问题: 如果我使用交叉编译器,我如何确定运行configure时应给予的"--host"选项的值?
具体问题:我正在使用面向arm64架构的交叉编译器。应该使用什么正确的"--host"值?
./configure
时应该给出的--host
选项的值?在讨论工具链创建时必须区分三台机器: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
,用于构建架构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
来说,这将自动设置,不需要担心。
对于某些软件包,只有两个选项可用,即host
和build
。在这种情况下,如果设置了host
,则足以进行交叉编译。
具体来说:我正在使用交叉编译器进行
arm64
架构。正确的--host
值是什么?
对于x86_64架构,通常会给出--host={triplet}
,因此我认为设置 --host={triplet}
适用于您的工具链,但我不确定。
--host
开关并使用正确的交叉工具链,autoconf项目就可以正确地进行交叉编译,而不需要--target
开关。如果只有--host
存在,那么假设目标与--host
相同,这种做法是否正确? - ceztko找出在--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用法的明确答案。
host
的值,但我认为您 实际上 想要的是build
的值。host
是配置正在运行的机器,并且可以使用config.guess
获取。您需要的是build
的三元组,这是软件包最终将在其中运行的计算机。(不要使用--target
;那是用于交叉编译工具链的)。三元组对于两个都是共享的,但没有简单的方法来获取三元组列表。还可以查看Autoconf邮件列表中的How To Configure for Android?。 - jww