GraalVM 生成的原生镜像可以替代 IKVM 生成的 DLL 吗?

问题描述 投票:0回答:2

我有一些 Java 应用程序和一些使用 C# 实现的 UWP 应用程序的客户,这些应用程序通过 Windows 应用商店等分发,他们想要使用我的应用程序的某些部分。这些部分非常独立于操作系统,只解析一些特殊的二进制文件格式,应用一些使用 YAML 文件和东西配置的业务逻辑。没有网络,GUI,只有一些文件访问等

我们目前使用 IKVM 使感兴趣的代码可用于 C#,但已经遇到了不同的问题。有些支持.NET Core,有些与Release中的nativetoolchain等有关。虽然在应用一些变通方法后现在一切似乎都有效,但我已经在寻找IKVM的替代品了.

我目前使用 IKVM 的唯一一件事就是使用 ikvmc 创建我的代码的 DLL,然后可以在 UWP 项目中引用它。编译器总结如下:

ikvmc 工具将 Java 字节码转换为 .NET dll 和 exe。

这就是我想到支持创建 GraalVM 的本机 Windows 映像的地方。其他人似乎已经为 Windows 构建了本机二进制文件,根据文档,GraalVM 能够使用“--shared”创建共享库。根据我的理解,IKVM 在 .NET 中实现了一个 JVM,并根据需要和可能映射事物。这听起来很像“Substrate VM”在处理原生图像时所做的,不是吗?

这个可执行文件包括应用程序、库、JDK 和 不在 Java VM 上运行,但包含必要的组件,例如 来自不同虚拟机的内存管理和线程调度 机器,称为“Substrate VM”。 Substrate VM 是 运行时组件(如反优化器、垃圾收集器、线程 日程安排等)。

https://www.graalvm.org/docs/reference-manual/native-image/

那么,是否有可能以 DLL 形式的本机映像替代目前由

ikvmc
创建的 DLL?有没有人已经尝试过并且有任何经验?有没有人已经尝试创建一个本机 DLL 并在其他一些本机 Windows 应用程序中使用它?根据我的理解,UWP“仅”应用了可能能够再次解决的额外限制。或者由于某些原因这种方法是完全不可能的?

感谢大家的参与!

java c# ikvm graalvm graalvm-native-image
2个回答
2
投票

我对IKVM项目不是很熟悉,所以这个回答主要是关于通用问题:

你能创建一个本机 DLL/共享库并在其他一些本机 Windows 应用程序中使用它吗?

应该可以。您可以将 Java 代码编译成共享库。入口点标有

@CEntrypoint
注释。

然后您可以使用生成的共享库和头文件从本机应用程序使用您的库。

例如 GraalVM 发行版默认使用 GraalVM JIT 编译器:

  1. GraalVM JIT 是用 Java 编写的
  2. 与本地图像一起编译为共享库
  3. 用于热点。

这里有一个页面描述了如何通过 JNI 使用 Java 中的那些:https://web.archive.org/web/20211212131233/https://www.graalvm.org/reference-manual/native-image/ImplementingNativeMethodsInJavaWithSVM/

这可能与您如何从 C# 应用程序使用共享库非常相似。


-1
投票

GraalVM 原生图像不是很灵活,不像 IKVM.NET 图像。除非你喜欢编写包装器和玩 P/Invoke,否则你应该坚持使用 IKVM.NET。

注意:我支持 IKVM.NET 分支

© www.soinside.com 2019 - 2024. All rights reserved.