java,System.loadlibrary(“someDLLFile”)得到不满意的链接错误

我已经写了一些JNI钩子到C ++库中,并为我的java服务器项目创build了一些DLL文件。 比方说,DLL和jar文件在“C:/ server”下的同一个文件夹中

我正在访问这些DLL文件使用:

System.loadLibrary("someDLLFile"); 

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

我遇到的问题是当我在自己的机器上运行此服务器时,无论我在哪里放置“服务器”文件夹,一切工作正常。 但是当我把它交给一个同事去testing的时候,他们不断地得到:

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

我想让DLL文件和jar文件在同一个文件夹中,并且不希望有人configuration他们的PATHvariables。

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

Solutions Collecting From Web of "java,System.loadlibrary(“someDLLFile”)得到不满意的链接错误"

它的工作原理是因为DLL(或者它依赖的DLL,即msvcr90.dll)是在你的机器的PATH中,而不是在另一个上。

设置PATH env-var或者java.library.path属性来包含你的文件的目录,或者保存你的dll,默认情况下java会找到它(根据部署策略和平台,这里有很多选项)。

一种选择是在启动虚拟机时在命令行中指定目录:

 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); 

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

我不确定这是否有帮助,但我已经在一些项目中包含了以下内容:

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

加载本机库。

然后我只是加载bin目录

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

它工作得很好。

但是,我不确定这是否是这种情况。

尝试下载depends.exe来查看该DLL是否依赖于系统上的其他DLL。 如果是这样,那么检查另一台机器,这样的dll是否存在或不在路径中。