交叉编译 openjdk 11u 到 Android 设备

Cross-compile openjdk 11u to Android device

我正在尝试将 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

但我收到以下输出错误:

checking resolved symbolic links for CC... no symlink configure: The C compiler (located as /mnt/d/ubuntu/NDK/build/tools/toolchain/bin/aarch64-linux-android21-clang) does not seem to be the required gcc compiler. configure: The result from running with --version was: "" configure: error: A gcc compiler is required. Try setting --with-tools-dir. configure exiting with result code 1

但如果我使用

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

输出是:

Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn) Target: aarch64-unknown-linux-android21 Thread model: posix InstalledDir: /mnt/d/ubuntu/NDK/build/tools/toolchain/bin

如果您阅读 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

The minimum accepted version of clang is 3.2. Older versions will not be accepted by configure.

To use clang instead of gcc on Linux, use --with-toolchain-type=clang.


话虽如此,我不评价您通过 简单地 交叉编译 OpenJDK Java 11 在 Android 上工作的机会。

有一个 OpenJDK 项目,用于将 Java 移植到 http://openjdk.java.net/projects/mobile/ 的移动设备......它们似乎在 Java 9 停滞不前。这对我来说意味着会有要在 Android 上实现 OpenJDK Java 11,需要完成大量工作。您可能想了解该项目以及可能仍在从事该项目的任何人。