MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中从Java加载库时出现UnsatisfiedLinkError (https://www.labfans.com/bbs/showthread.php?t=22924)

poster 2019-12-10 16:49

在MATLAB中从Java加载库时出现UnsatisfiedLinkError
 
我一直在将简单的Java模块集成到Windows上的MATLAB环境中,并取得了一些成功。最近,我遇到了尝试加载dll的第三方库的问题。

尝试加载时,java ClassLoader抛出UnsatisfiedLinkError:

java.lang.UnsatisfiedLinkError: no 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的目录的旧技巧。

如果没有绝对的答案,我欢迎您提出任何建议。

平台:Windows XP MATLAB R2009a Java 1.6


回答:
[I]刚刚在MATLAB文档中找到了这一点:[/I]

[B]指定Sun Java本机方法DLL的搜索路径[/B]

MATLAB用于查找Java所需的本机方法库的机制已更改。 MATLAB不再使用系统环境变量来定义这些库的路径。

[B]兼容性注意事项[/B]

如果为此目的当前依赖于PATH(对于Windows)或LD_LIBRARY_PATH(对于UNIX)环境变量,则将需要使用如下所述的文件librarypath.txt代替它。

[B]指定Java库路径[/B]

Java类可以使用Java方法java.lang.System.loadLibrary(“ LibFile”)动态加载本机方法。为了使JVM软件能够找到指定的库文件,包含它的目录必须在Java库路径上。该路径是在MATLAB启动时启动JVM软件时建立的,并且基于文件的内容

$ matlab / toolbox / local / librarypath.txt

(其中$ matlab是由MATLAB关键字matlabroot表示的MATLAB根目录)。

您可以通过编辑librarypath.txt文件来扩展本机方法库的搜索路径。编辑此文件时,请遵循以下准则:
[LIST][*]单独在一行中指定每个新目录。[*]仅指定目录名称,而不指定DLL文件的名称。 LoadLibrary调用会为您完成此操作。[*]为了简化跨平台环境中目录的规范,可以使用以下任何宏:$ matlabroot,$ arch和$ jre_home。[/LIST]
[url=https://stackoverflow.com/questions/1772572]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:08

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.