java - 将 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
解决方案
如果您阅读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。您可能想与该项目以及可能仍在从事该项目的任何人联系。
推荐阅读
- javascript - 我在运行 Mocha 测试时遇到问题。如何解决这个问题?
- ios - 在 SwiftUI 中切换视图后,Firebase 图像为空
- javascript - 如何在 React 中制作一个简单的循环滑块?
- java - 解决无法传输文件的问题
- r - for 循环和 if 语句来计算满足利润条件的月份
- c# - C# 按块检索 HTTP POST 分块响应?
- jquery - 将 ASP.NET MVC 站点部署到 IIS 时的其他目录名称问题
- node.js - mocha 异步测试超时
- azure - azure webapp 尝试挂载 blob 存储时出现容器错误
- gzip - Nifi CompressContent - 收到此异常“从 CompressContent 引发的 IOException:java.io.IOException:输入不是 .gz 格式”