ARM和GCC编译

时间:2013-05-09 19:50:21

标签: gcc android-ndk x86 arm

希望这已经没有被问过和回答,但我刚刚对ARM提出了一个快速的问题。

具体来说,如果编译Android(它有很多C和C ++),你使用GCC编译,那不是创建基于x86的代码吗?使用精简指令集的ARM处理器如何解释此代码并像它一样运行?

谢谢!

3 个答案:

答案 0 :(得分:3)

GCC不只是为x86编译。它实际上编译为任何指令集。如果你想,你可以通过添加几个文件来创建一个新的。

ARM不是精简指令集。它是一个完全不同的指令集。 ARM有一些x86没有的东西,反之亦然。

答案 1 :(得分:3)

构建gcc会执行配置步骤,其中一部分是指定back-end后端负责生成op-code。典型的编译器是许多阶段。简言之,将

  1. 解析器 - 将文本转换为数据表示。
  2. 前端 - 通过更改代码结构进行优化,可能是特定于语言的。
  3. 中端 - 执行任何编译器通用的计算机科学优化。
  4. 后端 - 执行特定于目标CPU的优化。
  5. 有关详情,请参阅stackoverflow compiler wiki。

    部分一个三个x86ARMgcc(或任何 GCC )。 Android编译器gcc的一个版本,已配置为生成 ARM 代码。它与通常在 x86 上运行的编译器不同。您可以在PC上运行 ARM模拟器,然后相信此代码由 x86 运行。但是,这是运行此代码的virtual ARM machinex86处理器本身无法运行ARM代码。

    Android gcc 是ARM配置的gcc。为gccx86配置了正常的 Linux发行版 x86_64


    上面缺少一些东西:谁编译编译器?在这两种情况下, x86 编译器都会编译新的编译器。区别在于所选的后端。一个是 x86 ,另一个是 ARM 。两个编译器都运行在 x86 上,但它们为不同的目标生成代码。 Gcc可以ARM x86生成代码;从来没有通过任何类型的命令行开关。编译器 build 通常指三种不同的CPU类型。

    1. 构建 - 构建编译器的机器。这是编译器的编译器。
    2. 主机 - 编译器运行的计算机。不是它的输出,而是编译器本身。
    3. 目标 - 后端目标的计算机。生成一个代码。
    4. 我想也许人们在想,因为他们都在同一个主机上运行,他们必须为同一个目标生成代码。但事实并非如此;起初它是一个小小的心灵弯曲。根据设置的不同,您可能需要为这些机器中的每台机器编译器才能进行最终编译。

      任何机器的第一个编译器通常都是交叉编译器。除了一些很久以前在汇编程序中编写原始编译器的人。

      另见:Cross compiler

答案 2 :(得分:1)

简单地说,当你在x86计算机上为ARM构建时,你正在使用交叉编译器 - 一个在一个平台上运行但为另一个平台生成代码的编译器。这在开发嵌入式或移动平台时非常常见。