将Quarkus应用程序编译到DLL(库)

将Quarkus应用程序编译到DLL(库),dll,quarkus,graalvm,graalvm-native-image,Dll,Quarkus,Graalvm,Graalvm Native Image,Quarkus应用程序是否可以编译为DLL 我有一些用Java编写的java代码,它可以编译到Windows上的.exe,并且可以在Visual C++中调用我的本地应用程序的代码,所以如果夸克的应用程序可以编译成DLL,那么我可以这样做。 Quarkus附带了许多有用的库,可从编译为本机的Java代码中使用。Quarkus用于将应用程序编译为本机二进制文件 您可以使用本机映像编译到共享库。例如,GraalVM发行版包括GraalVM JIT编译器,它最初是一个Java应用程序,但在默认情况下运

Quarkus应用程序是否可以编译为DLL

我有一些用Java编写的java代码,它可以编译到Windows上的.exe,并且可以在Visual C++中调用我的本地应用程序的代码,所以如果夸克的应用程序可以编译成DLL,那么我可以这样做。 Quarkus附带了许多有用的库,可从编译为本机的Java代码中使用。

Quarkus用于将应用程序编译为本机二进制文件

您可以使用本机映像编译到共享库。例如,GraalVM发行版包括GraalVM JIT编译器,它最初是一个Java应用程序,但在默认情况下运行
Java
时,它使用从JIT编译器的Java代码构建的共享库。这个共享库当然是用本机映像构建的

您可以在下面的示例中看到如何执行此操作。或者在本文档中介绍如何将Java代码编译到共享库(并通过JNI使用它): 当然,您不必通过JNI使用您的库,但可以从任何其他语言或环境中使用

MichaelSimons的这篇优秀文章介绍了如何将Neo4jJava驱动程序构建到共享库并使用C代码的示例:(“将Java带到C”部分)

简而言之,您可以使用
@CEntryPoint
注释标记要公开的方法,并将
--shared
标志添加到本机图像选项中。 结果是一个共享库和库的头文件

在使用由本机映像构建的共享库之前,需要一点仪式,即在调用共享库之前,您需要创建一个
隔离
,您可以通过调用提供的函数来实现这一点:

int graal_create_isolate(graal_create_isolate_params_t* params, graal_isolate_t** isolate, graal_isolatethread_t** thread);
您可能要做的另一件事是将
main
方法公开为入口点,并在开始调用其他公开的方法之前调用该入口点。这将(我认为)初始化应用程序,进行依赖项注入连接,等等。这对于库来说通常不是必需的,但是由于应用程序生命周期是由框架管理的,所以您可能需要这样做