【发布时间】:2009-11-20 18:57:45
【问题描述】:
我一直在将简单的 java 模块集成到 Windows 上的 MATLAB 环境中并取得了一些成功。最近遇到一个第三方库尝试加载dll的问题。
尝试加载时,java ClassLoader 会抛出 UnsatisfiedLinkError:
java.lang.UnsatisfiedLinkError: no <libname> in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
异常是报告我的“libname”不在 java.library.path 属性中。我已经验证该属性确实具有正确的路径,并且 libname.dll 文件存在于该路径上。
我通过两种方式验证了 java.library.path。首先,我只是检查了 MATLAB 命令行上返回的值:
>> java.lang.System.getProperty('java.library.path')
然后,我修改了相关的 java 方法以在调用失败的第三方函数之前打印该值:
System.out.println(System.getProperty('java.library.path'));
两者都确认我的路径值已按预期设置。
我也尝试过从命令行手动加载库,但结果相同。
这在 MATLAB 中是不可能的,还是我在这里遗漏了什么?不幸的是,我不是这台机器上的管理员,所以我无法尝试将 dll 移动到具有有效 dll 的目录的旧技巧。
如果没有绝对答案,我欢迎任何关于尝试的建议。
平台: 视窗 MATLAB R2009a Java 1.6
【问题讨论】:
-
如何验证 java.library.path 属性的值?
-
@matt b:我在帖子中添加了详细信息以回应您的问题。
-
你能看到第三方代码试图加载的库(通过查看源代码)吗?是否与 UnsatisfiedLinkError 中报告的库相同?
标签: java windows dll matlab shared-libraries