java.lang.UnsatisfiedLinkError 即使设置了 LD_LIBRARY_PATH 和 -Djava.library.path

Posted

技术标签:

【中文标题】java.lang.UnsatisfiedLinkError 即使设置了 LD_LIBRARY_PATH 和 -Djava.library.path【英文标题】:java.lang.UnsatisfiedLinkError even though LD_LIBRARY_PATH and -Djava.library.path were set 【发布时间】:2016-08-10 00:47:27 【问题描述】:

操作系统是 Linux Ubuntu 16.04 LTS

(该应用程序在 Windows 上运行得非常好,安装 Matlab Compiler SDK 后我无需进行任何配置)

我正在用 Java 编写一个 Web 应用程序,它还调用一些用 Matlab 编写的函数,这些函数需要安装 Matlab Compiler SDK,安装后,它告诉我将此 /usr/local/MATLAB/MATLAB_Runtime/v901/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64: 附加到 LD_LIBRARY_PATH 变量的末尾,这我做到了

export LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v901/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64:

但是当我尝试在 Netbeans 中运行 Web 应用程序时,为什么总是出现此错误?

java.lang.UnsatisfiedLinkError: Failed to find the required library libmwmclmcrrt.so.9.0.1 on java.library.path.
This library is typically installed along with MATLAB or the MCR. Its absence may indicate an issue with that installation or the current path configuration.

libmwmclmcrrt.so.9.0.1 位于/usr/local/MATLAB/MATLAB_Runtime/v901/runtime/glnxa64 目录中

我还添加了-Djava.library.path 以指向上面的 3 个目录条目,看看它是否有帮助,但它根本没有任何好处。

我在这里看了几篇帖子,但似乎没有解决它。

    JNI: Library is Found on Path, but Method is not (java.lang.UnsatisfiedLinkError) java.lang.UnsatisfiedLinkError even on setting -Djava.library.path

我该如何解决这个问题?顺便说一句,这是一个网络应用程序

【问题讨论】:

您能否验证您是否正确设置了java.library.path?如果运行java -Djava.library.path=<your paths> -XshowSettings:propertiesjava.library.path 属性的值是多少? @vsminkov 它只返回我传递的任何内容,即/usr/local/MATLAB/MATLAB_Runtime/v901/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64: 所以...在showSettings 输出路径不会在: 上拆分?那么path.separator 是什么? path.separator:,它在: 上拆分,因为这是Linux,java.library.path 显示/usr/local/MATLAB/MATLAB_Runtime/v901/runtime/glnxa64:/usr/local/MATLAB/MATLAB_‌​Runtime/v901/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64: 没有冒号: 这听起来很奇怪。 64/32位库有没有可能出现混乱? 【参考方案1】:

[在 Mac OS High Sierra 版本 10.13.5 (17F77) 上测试,在 Linux 上应该类似]

我所做的是启动应用程序服务器(在我的例子中为 Payara)。我像这样提供了javabuilder.jar 的路径

对于 Payara Full

asadmin deploy --libraries /path/to/javabuilder.jar app.war

对于 Payara Micro

java -jar payara-micro.jar --deploy app.war --addlibs /path/to/javabuilder.jar

注意/path/to/javabuilder.jarjavabuilder.jar 在目录MATLAB_HOME/MATLAB_Runtime/SOME_VERSION/toolbox/javabuilder/jar/javabuilder.jar 中的位置,复制此javabuilder.jar 文件并引用它将失败并出现相同的错误。它必须是它工作的原始路径。不知道为什么

【讨论】:

以上是关于java.lang.UnsatisfiedLinkError 即使设置了 LD_LIBRARY_PATH 和 -Djava.library.path的主要内容,如果未能解决你的问题,请参考以下文章