Java中,的System.loadLibrary(“someDLLFile”)得到unstatis

2019-07-29 02:53发布

我已经写了一些JNI钩入C ++库,并创造了一些DLL文件我的Java服务器项目。 比方说,DLL和jar文件在同一文件夹下的“C:/服务器”

我访问使用这些DLL文件:

System.loadLibrary("someDLLFile");

在需要的C ++代码的类。

我遇到的问题是,当我在我自己的机器上运行该服务器,一切正常,无论在哪里,我把“服务器”文件夹中。 但是,当我把它交给同事去测试,他们不断地得到:

java.lang.UnsatisfiedLinkError no someDLLFile in java.library.path

我想有DLL文件住在同一个文件夹中的jar文件,宁愿没有人配置他们的PATH变量。

为什么的System.loadLibrary()我自己的机器上工作,不管文件夹的位置,而不是另一台计算机上?

Answer 1:

它的工作原理,因为DLL(或它依赖于一个DLL,即MSVCR90.DLL或东西)是在你的机器上的路径,但不是在另一个。

无论是设置PATH环境-VAR或财产的java.library.path遏制dir用的文件,或保存您的DLL,其中的Java默认发现它(这里的许多选择,具体取决于部署策略和平台)。



Answer 2:

一种选择是,当您启动虚拟机指定命令行的目录:

java -classpath C:\server -Djava.library.path=C:\server somePackage.Main

另一种选择是使用System.load代替System.loadLibrary

URL url = Test.class.getResource("someDLLFile.dll");
String f = new File(url.getFile()).getAbsolutePath();
System.load(f);

缺点是,你的程序正在处理平台相关的目录名,文件扩展名等。



Answer 3:

我不知道这是有帮助或没有,但我已经包括在一些项目如下:

http://forums.sun.com/thread.jspa?threadID=707176

要装入本机库。

然后,我只是加载bin目录

    String binPath = new File(".").getAbsolutePath() 
                     + System.getProperty("file.separator") + "bin";

   addDir( binPath );

它工作得很好。

但同样,我不知道,如果是这样的话还是不行。



Answer 4:

尝试下载到的Depends.exe看到如果DLL依赖于系统或没有其他DLL。 如果是的话,再检查其他机器,这样的DLL文件是否存在或不路径。



文章来源: java, System.loadlibrary(“someDLLFile”) gets unstatisfied link error