交叉编译术语——构建、主机和目标

sh0*_*731 9 gcc cross-compiling

我看到很多冲突信息,希望得到一些澄清。\n构建主机目标

\n\n
\n

构建知道三个系统名称:您正在构建的机器(构建)、您正在构建的机器(主机)以及 GCC 将为其生成代码的机器(目标)。配置 GCC 时,可以使用 --build=、--host= 和 --target= 指定它们。

\n
\n\n

实际上,我不明白上面定义中的主机目标之间有什么区别。

\n\n

其他一些页面说

\n\n
\n

\xe2\x80\x98host\xe2\x80\x99 是您用来编译代码的机器(或体系结构、或平台);\n \xe2\x80\x98target\xe2\x80\x99 是机器(或架构或平台),旨在运行代码。

\n
\n\n

这对我来说很有意义,但在这个解释中,主机总是与构建相同吗?我很困惑。

\n\n

就我而言,我的配置是让编译器 (GCC) 在 x86_64 计算机上运行,​​而二进制可执行文件在 ARM 上运行。程序是用C语言编写的,所以编译器是GCC。

\n\n
   ./configure --build=x86_64 --host=x86_64 --target=arm-linux-gnueabihf\n    make\n    make install\n
Run Code Online (Sandbox Code Playgroud)\n\n

听起来像\nbuild,主机都是x86_64,目标是arm。那是对的吗?

\n\n

我正在编译自己的嵌入式程序,该程序在 Jenkins 机器(x86_64)上运行。嵌入式程序运行在基于ARM的机器上。

\n

Joe*_*Joe 5

假设我有一台 PowerPC 机器正在制作一个编译器,您将在 x86 机器上使用(运行)该编译器,该编译器将生成在 ARM 上运行的二进制文件。

这使得 PPC 成为构建,x86 成为主机,目标是 ARM。正如巴塞尔评论的那样,这是加拿大杂交品种。

构建和主机不同的情况不太常见,但确实会发生。有时,构建和主机甚至是相同的架构,但导致这种情况的环境有所不同。在我的 x86 上创建自定义工具链意味着构建和主机都是 x86,但主机可能具有与构建不同的库或依赖项版本。例如,为在构建服务器上运行的嵌入式开发构建沙盒工具链时就是这种情况。