首页 > 解决方案 > 将 openjdk 11u 交叉编译到 Android 设备

问题描述

我正在尝试将 openjdk 11u 交叉编译到 android。我正在使用以下命令:

CC=aarch64-linux-android21-clang CXX=aarch64-linux-android21-clang++ bash configure --openjdk-target=aarch64-linux-android21 --with-toolchain-path=/mnt/d/ubuntu/NDK/build/tools/toolchain --with-sysroot=/mnt/d/ubuntu/NDK/build/tools/toolchain/sysroot  --disable-warnings-as-errors

但我在下面收到输出错误:

检查 CC 的已解析符号链接...没有符号链接配置:C 编译器(位于 /mnt/d/ubuntu/NDK/build/tools/toolchain/bin/aarch64-linux-android21-clang)似乎不是所需的 gcc 编译器。配置:使用 --version 运行的结果是:“”配置:错误:需要 gcc 编译器。尝试设置 --with-tools-dir。使用结果代码 1 配置退出

但如果我使用

/mnt/d/ubuntu/NDK/build/tools/toolchain/bin/aarch64-linux-android21-clang --version

输出是:

Android(6454773 基于 r365631c2)clang 版本 9.0.8(https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f)(基于 LLVM 9.0.8svn)目标:aarch64-unknown-linux-android21 线程模型: posix InstalledDir:/mnt/d/ubuntu/NDK/build/tools/toolchain/bin

标签: javaandroidandroid-ndkcross-compiling

解决方案


如果您阅读GCC vs. Clang/LLVM: An In-Depth Comparison of C/C++ Compilers,很明显 clang 不是 gcc 编译器。

但是,当您查看源代码树(例如.../jdk11/make/autoconf/toolchain.m4)时,有明显迹象表明可以使用clang 工具链来构建JVM。问题似乎是 m4 宏不将 android 理解为目标平台,并且似乎已经退回到尝试使用 gcc。

请注意,Java 11 构建指令是这样说的:

最低接受的 clang 版本是 3.2。旧版本将不被接受configure

要在 Linux 上使用 clang 而不是 gcc,请使用 --with-toolchain-type=clang.


话虽如此,但我并不认为通过简单的交叉编译让 OpenJDK Java 11 在 Android 上运行的机会。

在http://openjdk.java.net/projects/mobile/有一个用于将 Java 移植到移动设备的 OpenJDK 项目……而且它们似乎在 Java 9 上停滞不前。这对我来说表明将有大量工作要做完成后才能在 Android 上运行 OpenJDK Java 11。您可能想与该项目以及可能仍在从事该项目的任何人联系。


推荐阅读