交叉编译和本机编译之间的具体区别是什么?
答案1
你用一个交叉编译器为本地主机以外的平台生成可执行文件(或对象)。本机编译器仅生成本机二进制文件。
答案2
交叉编译是针对与您正在运行的 CPU 类型不同的 CPU 类型进行编译。一个例子是在 i386 系统下编译 ARM 二进制文件,或在 32 位系统下编译 64 位可执行文件。
在交叉编译时,通常无法运行刚刚编译的内容,直到将二进制文件发送到它们所属的系统。
本机编译是指针对正在运行的相同架构进行编译,这是正常情况。
答案3
交叉编译是为除您正在运行的平台之外的平台(大致是操作系统、CPU 系列和 ABI 的组合)构建的。这意味着拥有一个在一个平台上运行但针对另一个平台的编译器。通常(有例外,因为某些平台具有兼容层)意味着您不能只运行刚刚构建的二进制文件。
在交叉构建中,编译器本身通常并不是什么大问题,构建系统的其余部分才是。构建系统需要使用正确的选项运行正确的编译器。许多构建系统构建并运行测试程序来计算出它们正在运行的系统的详细信息。如果你是交叉构建,你通常不能这样做。许多构建系统使用它们构建的程序在构建过程中生成东西,这可能意味着你的构建系统需要为你构建的平台构建一些东西,为你正在构建的平台构建一些东西,并可能为两者构建一些东西。