尽管设置了LD_LIBRARY_PATH和-Djava.library.path,仍然出现java.lang.UnsatisfiedLinkError错误

3

操作系统是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个目录条目,看看是否有帮助,但实际上它并没有起任何作用。

我在这里读了几篇文章,但似乎都没有解决问题。

  1. JNI:找到库路径,但方法未找到(java.lang.UnsatisfiedLinkError)
  2. 即使设置 -Djava.library.path,仍然出现 java.lang.UnsatisfiedLinkError

我该如何解决这个问题?顺便说一下,这是一个Web应用程序。


那么,在 showSettings 中,输出路径没有在 : 上分割?那么 path.separator 是什么呢? - vsminkov
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:,如果没有冒号 :,则不会进行分割。 - Trash Can
@Dummy,你找到解决方案了吗?有时它能找到,有时却会出现你提到的错误。 - Jay
@Jay,我们决定使用Windows,因为我们不想麻烦,但我认为你可以尝试导出LD_LIBRARY_PATH,然后使用相同的终端从命令行启动你的IDE,这样,你导出变量LD_LIBRARY_PATH的终端会话将被保留。我不确定这是否有效,因为我没有尝试过。 - Trash Can
@Dummy 我也尝试了同样的方法,但无法在Ubuntu上使其正常工作。尝试了几个方法... 1.) 设置matlab.conf并将其添加到/etc/ld.so.conf.d/下 - 这破坏了我的系统范围内的LD_LIBRARY_PATH, 2.) 在.bashrc中设置LD_LIBRARY_PATH,这也没有帮助, 3.) 在idea.vmoptions下设置LD_LIBRARY_PATH,也没有帮助。似乎在Linux上存在MCR问题,或者正确的配置未在mathworks网站上记录。 - Jay
显示剩余8条评论
1个回答

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.jarMATLAB_HOME/MATLAB_Runtime/SOME_VERSION/toolbox/javabuilder/jar/javabuilder.jar 目录中 javabuilder.jar 的位置,将此 javabuilder.jar 文件复制出来并引用它会导致相同的错误。它必须使用其原始路径才能正常工作。不确定为什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接