18.6.3主机和交叉编译
基于编译器作者的经验,经过长时间公开争论中,交叉编译链的许多方面都发生了变化:
- 构建、主机和目标体系结构类型之间的关系,
- 用于指定它们的命令行界面
配置
, - 中定义的变量
配置
, - 交叉编译模式的启用。
已清理生成、主机和目标之间的关系:默认链现在很简单:目标默认为主机,主机默认为生成,并生成结果配置猜测
尽管如此,为了简化从2.13到2.50的过渡,请执行以下操作实现了过渡方案。不要依赖它,因为它会在几个版本中完全禁用(我们不能保留它,因为它导致的问题比治愈的问题多)。
它们都默认为运行结果配置猜测
,除非您可以指定--建造或--主机在这种情况下,默认值成为您指定的系统类型。如果同时指定两者,它们是不同的,配置
进入交叉编译模式,因此它不运行任何需要执行的测试。
提示:如果您打算覆盖配置猜测
,更喜欢--建造结束--主机.
为了向后兼容,配置
接受系统键入作为选项。这样的选项会覆盖构建、主机和目标系统类型的默认值。以下内容configure语句配置在其上运行的跨工具链NetBSD/alpha但为GNU Hurd/sparc生成代码,这也是构建平台。
./configure--host=alpha-netbsd sparc-gnu
在Autoconf 2.13及更早版本中,变量建造
,主办
,和目标
在调用AC_CANONICAL_BUILD公司
等等,现在--建造严格复制到构建别名
,左为否则为空。在AC_CANONICAL_BUILD公司
,建造
是设置为规范化的生成类型。为了简化过渡,其内容与构建别名
.执行不依赖于这个断裂的特征。
为了与上述向后兼容方案保持一致,什么时候--主机已指定,但--建造不是,建造假设系统与--主机、和‘构建别名'设置为该值。最终,这个历史上的错误行为将会消失。
前一种支持交叉编译的方案被证明会带来更多危害特别是,它过去太容易被触发,导致普通终端用户在隐秘的错误消息面前感到困惑。配置
甚至只能进入交叉编译模式因为编译器不起作用。这主要是因为配置
用于尝试检测交叉编译,而不是等待用户的显式标志。
现在,配置
当且仅当--主机已通过。
这是简短的文档。为了简化2.13和它的后继者是一个更复杂的方案。不要依赖以下内容,因为它将在不久的将来被移除。
如果您指定--主机,但不是--建造,何时配置
执行它尝试运行的第一个编译器测试编译器生成的可执行文件。如果执行失败进入交叉编译模式。这是易碎的。而且,到那时执行编译器测试时,修改构建系统类型:可能已经执行了其他测试。因此,每当您指定--主机,请务必指定--建造也是。
./configure--build=x86_64-pc-linux-gnu--host=x86=64-w64-mingw64
进入交叉编译模式。前一个接口包括在不通知的情况下将编译器设置为交叉编译器配置
已过时。例如,配置
如果无法运行指定编译器生成的代码,则失败配置如下:
./configure CC=x86_64-w64-mingw64-gcc