3

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

成功案例:

C:>设置 PATH=\Progra~1\Company\Compan~1\lib;\Progra~1\Java\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 无法加载基本公司 API 库异常在线程“main”java.lang.UnsatisfiedLinkError: C:\Program Files\Company\Company Client API\lib\CompanyAPI.dll: 找不到依赖位于 java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732) 的 java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807) 的 java.lang.ClassLoader$NativeLibrary.load(Native Method) 的库。 Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at com.company.api.CompanyClientAPIImpl.(CompanyClientAPIImpl.ja va:113) at com.company.samples.ft .MainClass.run(主类。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 无法加载基本公司 API 库 线程“主”java.lang.UnsatisfiedLinkError 异常:C:\Program Files\Company\Company Client API\lib\CompanyAPI.dll : 在 java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807) 在 java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732) 的 java.lang.ClassLoader$NativeLibrary.load(Native Method) 找不到依赖库) 在 java.lang.Runtime.loadLibrary0(Runtime.java:823) 在 java.lang.System.loadLibrary(System.java:1028) 在 com.company.api.CompanyClientAPIImpl.(CompanyClientAPIImpl.java:113) 在 com。公司。samples.ft.MainClass.run(MainClass.java:130) at com.company.samples.ft.MainClass.main(MainClass.java:498)

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

谢谢,迈克

4

0 回答 0