Windows中的JNI代码使用PATH但不适用于java.library.path

时间:2015-05-29 19:19:39

标签: java windows java-native-interface java.library.path

Windows上的Java 1.6 我正在使用一个使用JNI的Java库。我想使用java.library.path环境变量将它指向DLL,但它不起作用。当我在PATH变量中放置相同的路径时,它可以正常工作。

成功案例:

  

C:>设置   PATH = \ PROGRA〜1 \公司\ COMPAN〜1 \ lib中; \ PROGRA〜1 \爪哇\ jdk1.6.0_43 \ BIN

(设置没有驱动器或空格的路径以尽量避免空间问题,尽管所有的jar和库都在C盘上)

  

java -cp%CLASSPATH%com.company.samples.ft.MainClass

案例1失败:

  

设置PATH = \ Progra~1 \ Java \ jdk1.6.0_43 \ bin   C:> java -Djava.library.path = \ Progra~1 \ Company \ Compan~1 \ lib -cp   %CLASSPATH%com.company.samples.ft.MainClass ft \ FT.cfg无法   load base公司API库线程“main”中的异常   java.lang.UnsatisfiedLinkError:C:\ Program Files \ Company \ Company   客户端API \ lib \ CompanyAPI.dll:找不到依赖库           at java.lang.ClassLoader $ NativeLibrary.load(Native Method)           at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)           at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)           在java.lang.Runtime.loadLibrary0(Runtime.java:823)           在java.lang.System.loadLibrary(System.java:1028)           在com.company.api.CompanyClientAPIImpl。(CompanyClientAPIImpl.ja   VA:113)           在com.company.samples.ft.MainClass.run(MainClass.java:130)           在com.company.samples.ft.MainClass.main(MainClass.java:498)

请注意,它确实找到了我的DLL而不是依赖项,即使它具有来自我原始Windows PATH的库路径。 java.library.path仍然缺少JDK路径,它仍然在PATH变量中,所以让我们尝试将它添加到java.library.path:

  

C:\ Program Files \ Company \ Company Client APIs \ samples \ jcapi> java   -Djava.library.path = \ Progra~1 \ Company \ Compan~1 \ lib; \ Progra~1 \ Java \ jdk1.6.0_43 \ bin -cp   %CLASSPATH%com.company.samples.ft.MainClass无法   load base公司API库线程“main”中的异常   java.lang.UnsatisfiedLinkError:C:\ Program Files \ Company \ Company   客户端API \ lib \ CompanyAPI.dll:找不到依赖库           at java.lang.ClassLoader $ NativeLibrary.load(Native Method)           at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)           at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)           在java.lang.Runtime.loadLibrary0(Runtime.java:823)           在java.lang.System.loadLibrary(System.java:1028)           在com.company.api.CompanyClientAPIImpl。(CompanyClientAPIImpl.java:113)           在com.company.samples.ft.MainClass.run(MainClass.java:130)           在com.company.samples.ft.MainClass.main(MainClass.java:498)

因此,即使java.library.path看起来与我原来的PATH完全相同,也找不到该库。知道问题在这里吗?

谢谢, 麦克

0 个答案:

没有答案