Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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与本机库_Java_Dll_Java Native Interface - Fatal编程技术网

跨平台Java与本机库

跨平台Java与本机库,java,dll,java-native-interface,Java,Dll,Java Native Interface,我正在尝试为本机库实现一个包装器,它将通过Java应用程序中的JNI使用。我想让程序的安装像“解压这个文件并运行”一样简单 到目前为止,我已经完成了大部分包装程序,让它从特定于平台的JAR文件中解压本机库,并在运行时设置-Djava.native.lib变量。由于不满意的链接错误,我遇到了最后一个障碍 在Windows上,我调用的dll是针对msvcr100.dll的链接。虽然我调用的dll被java.native.lib获取,但msvcr100.dll没有。我不想让用户在使用我们的应用程序之前

我正在尝试为本机库实现一个包装器,它将通过Java应用程序中的JNI使用。我想让程序的安装像“解压这个文件并运行”一样简单

到目前为止,我已经完成了大部分包装程序,让它从特定于平台的JAR文件中解压本机库,并在运行时设置-Djava.native.lib变量。由于不满意的链接错误,我遇到了最后一个障碍

在Windows上,我调用的dll是针对msvcr100.dll的链接。虽然我调用的dll被java.native.lib获取,但msvcr100.dll没有。我不想让用户在使用我们的应用程序之前安装C++运行时,所以我们将DLL文件打包在其他DLL旁边。p> 据我所知,要使事情正常进行,我们需要将包含msvcr100.dll的文件夹放在路径上。我尝试使用反射来更改应用程序内部的环境,以便将解包目录添加到PATH环境变量中。失败后,我回忆起我只是在修改环境的一个副本


是否有某种方法可以修复不满意的链接错误,而不需要任何额外的系统设置(安装运行时、手动修改路径等)?我认为这是可能的,因为我遇到了其他软件(SWT、JOGL),它们打包了本机库,但没有出现此问题。

如果手动修改路径,是否所有这些都对您有效?这至少可以排除其他因素,例如dll和JVM的不兼容位。您可以通过
LoadLibraryEx
加载dll,并选择在与dll相同的目录中搜索依赖dll。Java附带了一个优秀的安装程序,名为。它将处理安装,包括本机库。它可以处理安装的许多其他方面,例如添加桌面图标、添加“开始”菜单项和设置文件关联。使用它非常简单:只需编写一个扩展名为.jnlp的简短XML文件来描述您的应用程序。@WhiskySpider它确实可以工作,这就是我们几年来一直在做的事情。希望从手动修改中移除。@由于安全限制,VGR JWS在我们的环境中不起作用。不幸的是,zip文件是唯一允许我们分发软件的方式。