Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java与C++;静态使用JNI P>是否可以将C++库静态链接到java程序,使它们成为一个文件,就像链接2个C++库一样? (我听说java程序也可以编译成EXE)_Java_C++_Java Native Interface - Fatal编程技术网

将Java与C++;静态使用JNI P>是否可以将C++库静态链接到java程序,使它们成为一个文件,就像链接2个C++库一样? (我听说java程序也可以编译成EXE)

将Java与C++;静态使用JNI P>是否可以将C++库静态链接到java程序,使它们成为一个文件,就像链接2个C++库一样? (我听说java程序也可以编译成EXE),java,c++,java-native-interface,Java,C++,Java Native Interface,理论上,这应该可以创建一个已经包含JVM使用的所需JNI函数的EXE 此EXE必须通过在同一进程中启动JVM实例来加载Java部分(通过加载JVM.dll并执行它,如所示) 我所知道的JavaEXE包装器不支持这样的东西,因为它们附带了一个预编译的EXE,将使用过的JAR作为资源附加。因此,我假设您必须构建自己的C/C++可执行文件,并实现所需的所有功能。当我使用JNI时,我会将支持JNI的dll包含到jar文件中。然后通过类路径访问它。您将拥有一个jar文件。除非您可以访问jvm.lib库的静

理论上,这应该可以创建一个已经包含JVM使用的所需JNI函数的EXE

此EXE必须通过在同一进程中启动JVM实例来加载Java部分(通过加载JVM.dll并执行它,如所示)


我所知道的JavaEXE包装器不支持这样的东西,因为它们附带了一个预编译的EXE,将使用过的JAR作为资源附加。因此,我假设您必须构建自己的C/C++可执行文件,并实现所需的所有功能。

当我使用JNI时,我会将支持JNI的dll包含到jar文件中。然后通过类路径访问它。您将拥有一个jar文件。

除非您可以访问jvm.lib库的静态版本,否则这是不可能的。它作为一个动态链接库分发,引用jvm.dll。你不能这样做。

在正常情况下,我不得不说不行。Microsoft使用肮脏的黑客技术来制作“混合程序集”,其中包含托管代码和非托管代码,并且可能存在一个java->exe工具,它也可以这样做。我很好奇为什么DLL不合适。因为:)哦,天哪。我建议您真正想做的是将您的应用程序作为可通过internet访问的服务运行。如果做不到这一点,你可能应该省一点钱,与Excelsior JET的伙计们聊聊天,他们似乎是最有可能支持这种功能的人。@Rook-混合模式程序集并不完全是肮脏的黑客。他们有很好的记录/很正常。真的吗?操作系统如何在JAR文件中加载DLL?这怎么就好像链接2个C++库?不。加载JVM.DLL不符合“就像连接2个C++库”。然后你会有一个EXE文件,其中包括除JRE以外的所有内容。他特别要求一个文件。这至少是两个文件。原来的问题只是问是否可以集成C++库。JVM不是C++库,超出了这个问题的范围。因此,我的答案是正确的。EJP:当我写“一个文件”时,我的意思是我希望我的C++库集成到java exe中。将JVM作为一个单独的DLL是非常好的:)@downvoter请用这个答案解释您所感知到的问题。无法解释的否决票无助于任何人,并引起其他怀疑。