【问题标题】:How can I build ARMv8 aarch32 binary?如何构建 ARMv8 aarch32 二进制文件?
【发布时间】:2017-11-22 15:50:47
【问题描述】:

我正在使用 Mediatek X20 开发板和gcc-linaro-6.3.1-2017.05 版本 用于基准 aarch64aarch32

所以我想将二进制文件构建为两种类型的 aarch32 abi :lp64ilp32

来自 gcc 手册,(@[toolchain_path]/share/doc/gcc/AArch64-Options.html)

它说我可以选择ilp32lp64-mabi 选项。

但是当我使用-mabi=lp64-mabi=ilp32 时,gcc 会出现如下错误。

armv8l-linux-gnueabihf-gcc: error: unrecognized argument in option \u2018-mabi=lp64\u2019
armv8l-linux-gnueabihf-gcc: note: valid arguments to \u2018-mabi=\u2019 are: aapcs aapcs-linux apcs-gnu atpcs iwmmxt

如何制作ilp32lp64 格式的二进制文件?

我如何检查二进制文件的格式?

感谢您的回复:)

【问题讨论】:

  • 1) CROSS_COMPILE 和 ARCH 的路径是否正确?? 2)你对内核源码路径有足够的权限吗??
  • 我的答案 :) 1, 2) 我只是构建 test.c。所以我用下面的命令构建。 "armv8l-linux-gnueabihf-gcc test.c -o -march=armv8-a+crc -mabi=lp64"

标签: c armv8


【解决方案1】:

ILP32 和 ILP64 都是 AArch64,只是其中一个被限制为 32 位地址,但指令编码是相同的。为此,您将需要使用特殊的工具链。我没有试过这个,但你应该谷歌搜索“AArch64 ILP32 工具链”。看起来它没有被积极维护。 如果你想要 AArch32,那就是 ARMv7,你需要常规的 arm 工具链 (arm-linux-gnueabihf)。 https://wiki.linaro.org/Platform/arm64-ilp32

【讨论】:

    【解决方案2】:

    现在有一个针对 Debian stable 的 arm64ilp32 的 amd64 交叉工具链: https://people.linaro.org/~wookey/ilp32/

    这是非常新的,但似乎工作正常。请注意,这仅针对 arm64ilp32。如果您还想以普通 arm64 (LP64) 为目标,那么您还需要安装存档中已经存在的 aarch64-linux-gnu 交叉编译器。

    非常欢迎反馈。 g++ 交叉编译器还不能安装,因为没有对应的 libstdc++:arm64ilp32 可用。

    更新(2017 年 9 月)。这个 repo 现在包含一组用于 Debian stable 的可 debootstrapable arm64ilp32 软件包。

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 2014-03-02
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多