【问题标题】:Trying to cross compile Python I'm getting an unrecognised emulation mode尝试交叉编译 Python 我得到了一个无法识别的仿真模式
【发布时间】:2018-01-05 20:50:17
【问题描述】:

我一直在研究一个 GitHub 项目,该项目可以交叉编译适用于 Android 的 Python https://github.com/GRRedWings/python3-android/tree/clang

Google 很快就会在 NDK 中弃用 gcc,所以我一直在尝试从使用 gcc 切换到 clang。

几年前我偶然发现了这个项目,并且一直在尝试使用当前版本的库来维护它,但是这个让我很难过。我已经更新了上面的分支,我认为它是用clang编译的,但是它无法链接到以下错误

/home/python3-android/sdk/android-ndk-r16b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/ld: unrecognised emulation mode: elf_x86_64

Supported emulations: aarch64linux aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb aarch64linuxb aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi

clang: error: linker command failed with exit code 1 (use -v to see invocation)

../Makefile.shared:164: recipe for target 'link_app.' failed

在第一行的末尾是无法识别的emulation mode elf_x86_64。我不明白它从哪里获得模拟模式,或者如何更改它。

arm 或 arm64 出现同样的错误。我使用 2 个文件来设置环境和 makefile 变量

环境 -- https://github.com/GRRedWings/python3-android/blob/clang/env

build_single.sh -- https://github.com/GRRedWings/python3-android/blob/clang/mk/build_single.sh

我对交叉编译和需要什么比较陌生,此时只是不知道该去哪里找。

根据我继承的脚本,我有以

开头的 CPPFLAGS 和 LDFLAGS

-target aarch64-none-linux-android -gcc-toolchain ${NDK_ROOT}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64

【问题讨论】:

    标签: python android-ndk clang clang++ llvm-clang


    【解决方案1】:

    您没有传递 -target aarch64-linux-android,因此 Clang 默认以 x86_64 为目标,而是使用您提供的 aarch64 链接器。

    NDK 提供了一个工具来为您完成这项工作:https://developer.android.com/ndk/guides/standalone_toolchain.html

    【讨论】:

    • 感谢您的帖子,我一定会检查该工具。我想我在最新的 clang 提交中已经解决了这个问题,但是现在 Python 无法编译。也许该工具可以提供帮助
    • 您是否碰巧查看了 Python 的 build.sh?使用您提到的 NDK 工具,我运气不佳。我对在 Linux 上进行交叉编译和构建还是很陌生。这应该为我生成一个脚本吗?
    • 阅读文档底部的部分:developer.android.com/ndk/guides/…
    • 根据经验,python 源代码与 setup.py 一起使用的方式我的印象是您必须先构建中间 hostpython,然后才能为目标构建,iirc python3 源代码无法编译一步主机,目标组合
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多